02 2023 档案
摘要:SpringBoot的启动流程 以 StartupApplication 启动类为入口 将 return new SpringApplication(primarySources).run(args) 分解为两步 创建对象:new SpringApplication(primarySources)
阅读全文
摘要:自定义starter开发 自动配置学习完后,我们就可以基于自动配置的特性,开发springboot技术中最引以为傲的功能了,starter。其实通过前期学习,我们发现用什么技术直接导入对应的starter,然后就实现了springboot整合对应技术,再加上一些简单的配置,就可以直接使用了。这种
阅读全文
摘要:自动配置工作流程 自动配置是springboot技术非常好用的核心因素,这里需要先复习一下有关spring技术中bean加载相关的知识。 bean的 8种加载方式 方式一:配置文件+<bean/>标签 最高端的食材往往只需要最简单的烹饪方法,搞错了,再来。最初级的bean的加载方式其实可以直
阅读全文
摘要:监控 在说监控之前,需要回顾一下软件业的发展史。最早的软件完成一些非常简单的功能,代码不多,错误也少。随着软件功能的逐步完善,软件的功能变得越来越复杂,功能不能得到有效的保障,这个阶段出现了针对软件功能的检测,也就是软件测试。伴随着计算机操作系统的逐步升级,软件的运行状态也变得开始让人捉摸不透,
阅读全文
摘要:SpringBoot整合Kafka 安装 windows版安装包下载地址:https://kafka.apache.org/downloads 下载完毕后得到tgz压缩文件,使用解压缩软件解压缩即可使用,解压后得到如下文件 建议使用windows版2.8.1版本。 启动服务器 kaf
阅读全文
摘要:SpringBoot整合RocketMQ RocketMQ由阿里研发,后捐赠给apache基金会,目前是apache基金会顶级项目之一,也是目前市面上的MQ产品中较为流行的产品之一,它遵从AMQP协议。 安装 windows版安装包下载地址:https://rocketmq.apache.o
阅读全文
摘要:SpringBoot整合RabbitMQ RabbitMQ是MQ产品中的目前较为流行的产品之一,它遵从AMQP协议。RabbitMQ的底层实现语言使用的是Erlang,所以安装RabbitMQ需要先安装Erlang。 Erlang安装 windows版安装包下载地址:https://www.
阅读全文
摘要:SpringBoot整合ActiveMQ ActiveMQ是MQ产品中的元老级产品,早期标准MQ产品之一,在AMQP协议没有出现之前,占据了消息中间件市场的绝大部分份额,后期因为AMQP系列产品的出现,迅速走弱,目前仅在一些线上运行的产品中出现,新产品开发较少采用。 安装 windows版安
阅读全文
摘要:消息 消息的概念 从广义角度来说,消息其实就是信息,但是和信息又有所不同。信息通常被定义为一组数据,而消息除了具有数据的特征之外,还有消息的来源与接收的概念。通常发送消息的一方称为消息的生产者,接收消息的一方称为消息的消费者。这样比较后,发现其实消息和信息差别还是很大的。 为什么要设置生产者
阅读全文
摘要:邮件 springboot整合第三方技术第三部分我们来说说邮件系统,发邮件是java程序的基本操作,springboot整合javamail其实就是简化开发。不熟悉邮件的小伙伴可以先学习完javamail的基础操作,再来看这一部分内容才能感触到springboot整合javamail究竟简化了哪
阅读全文
摘要:任务 springboot整合第三方技术第二部分我们来说说任务系统,其实这里说的任务系统指的是定时任务。定时任务是企业级开发中必不可少的组成部分,诸如长周期业务数据的计算,例如年度报表,诸如系统脏数据的处理,再比如系统性能监控报告,还有抢购类活动的商品上架,这些都离不开定时任务。本节将介绍两种不
阅读全文
摘要:缓存 企业级应用主要作用是信息处理,当需要读取数据时,由于受限于数据库的访问效率,导致整体系统性能偏低。 应用程序直接与数据库打交道,访问效率低 为了改善上述现象,开发者通常会在应用程序与数据库之间建立一种临时的数据存储机制,该区域中的数据在内存中保存,读写速度较快,可以有效解决数据库访
阅读全文
摘要:NoSQL NoSQL就是非关系型数据库解决方案,意思就是数据该存存该取取,只是这些数据不放在关系型数据库中了,那放在哪里?自然是一些能够存储数据的其他相关技术中了,比如Redis等。本节讲解的内容就是springboot如何整合这些技术,在springboot官方文档中提供了10种相关技术的整
阅读全文
摘要:数据层解决方案 - SQL SSMP整合的时候数据层解决方案涉及到了哪些技术?MySQL数据库与MyBatisPlus框架,后面又学了Druid数据源的配置,所以现在数据层解决方案可以说是Mysql+Druid+MyBatisPlus。而三个技术分别对应了数据层操作的三个层面: 数据源技术:Dr
阅读全文
摘要:测试 测试是保障程序正确性的唯一屏障,在企业级开发中更是不可缺少,但是由于测试代码往往不产生实际效益,所以一些小型公司并不是很关注,导致一些开发者从小型公司进入中大型公司后,往往这一块比较短板,所以还是要拿出来把这一块知识好好说说,做一名专业的开发人员。 加载测试专用属性 测试过程本身并不是
阅读全文
摘要:数据类型转换 先把问题描述一下,这位开发者连接数据库正常操作,但是运行程序后显示的信息是密码错误。 java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 其实看到这个报错,
阅读全文
摘要:校验 在书写时由于无法感知模型类中的数据类型,就会出现类型不匹配的问题,比如代码中需要int类型,配置中给了非法的数值,例如写一个“a",这种数据肯定无法有效的绑定,还会引发错误。 SpringBoot给出了强大的数据校验功能,可以有效的避免此类问题的发生。在JAVAEE的JSR303规范中
阅读全文
摘要:常用计量单位绑定 在前面的配置中,我们书写了如下配置值,其中第三项超时时间timeout描述了服务器操作超时时间,当前值是-1表示永不超时。 servers: ip-address: 192.168.0.1 port: 2345 timeout: -1 但是每个人都这个值的理解会产生不同,比
阅读全文
摘要:宽松绑定/松散绑定 在进行属性绑定时,可能会遇到如下情况,为了进行标准命名,开发者会将属性名严格按照驼峰命名法书写,在yml配置文件中将datasource修改为dataSource,如下: dataSource: driverClassName: com.mysql.jdbc.Driver
阅读全文
摘要:@ConfigurationProperties为使用@Bean声明的第三方bean绑定属性 在基础篇学习了@ConfigurationProperties注解,此注解的作用是用来为bean绑定属性的。开发者可以在yml配置文件中以对象的格式添加若干属性 servers: ip-address:
阅读全文
摘要:热部署 什么是热部署?简单说就是你程序改了,现在要重新启动服务器,嫌麻烦?不用重启,服务器会自己悄悄的把更新后的程序给重新加载一遍,这就是热部署。 热部署的功能是如何实现的呢?这就要分两种情况来说了,非springboot工程和springboot工程的热部署实现方式完全不一样。先说一下原始
阅读全文
摘要:日志 运维篇最后一部分我们来聊聊日志,日志大家不陌生,简单介绍一下。日志其实就是记录程序日常运行的信息,主要作用如下: 编程期调试代码 运营期记录信息 记录日常运营重要信息(峰值流量、平均响应时长……) 记录应用报错信息(错误堆栈) 记录运维过程数据(扩容、宕机、报警……) 或许各位小伙伴并
阅读全文
摘要:多环境开发 什么是多环境?其实就是说你的电脑上写的程序最终要放到别人的服务器上去运行。每个计算机环境不一样,这就是多环境。常见的多环境开发主要兼顾3种环境设置,开发环境——自己用的,测试环境——自己公司用的,生产环境——甲方爸爸用的。因为这是绝对不同的三台电脑,所以环境肯定有所不同,比如连接的数
阅读全文
摘要:配置高级 关于配置在基础篇讲过一部分,基础篇的配置总体上来说就是让各位小伙伴掌握配置的格式。比如配置文件如何写啊,写好的数据如何读取啊,都是基础的语法级知识。在实用篇中就要集中在配置的应用这个方面了,下面就开始配置高级相关内容的第一部分学习,为什么说第一部分,因为在开发实用篇中还有对应的配置高级
阅读全文
摘要:SpringBoot程序的打包与运行 企业项目上线为了保障环境适配性会采用下面流程发布项目,这里不讨论此过程。 开发部门使用Git、SVN等版本控制工具上传工程到版本服务器 服务器使用版本控制工具下载工程 服务器上使用Maven工具在当前真机环境下重新构建项目 启动服务 所谓打包指将程序转换
阅读全文
摘要:表现层开发 终于做到表现层了,做了这么多都是基础工作。其实你现在回头看看,哪里还有什么SpringBoot的影子?前面1,2步就搞完了。继续完成表现层制作吧,咱们表现层的开发使用基于Restful的表现层接口开发,功能测试通过Postman工具进行 表现层接口如下: @RestControl
阅读全文
摘要:业务层开发 数据层开发告一段落,下面进行业务层开发,其实标准业务层开发很多初学者认为就是调用数据层,怎么说呢?这个理解是没有大问题的,更精准的说法应该是组织业务逻辑功能,并根据业务需求,对数据持久层发起调用。有什么差别呢?目标是为了组织出符合需求的业务逻辑功能,至于调不调用数据层还真不好说,有需
阅读全文
摘要:数据层开发——基础CRUD 数据层开发本次使用MyBatisPlus技术,数据源使用前面学习的Druid,学都学了都用上 步骤①:导入MyBatisPlus与Druid对应的starter,当然mysql的驱动不能少 <dependencies> <dependency> <groupId>co
阅读全文
摘要:整合Druid 使用SpringBoot整合了3个技术了,发现套路基本相同,导入对应的starter,然后做配置,各位小伙伴需要一直强化这套思想。下面再整合一个技术,继续深入强化此思想。 前面整合MyBatis和MP的时候,使用的数据源对象都是SpringBoot默认的数据源对象,下面我们手
阅读全文
摘要:整合MyBatis-Plus 做完了两种技术的整合了,各位小伙伴要学会总结,我们做这个整合究竟哪些是核心?总结下来就两句话 导入对应技术的starter坐标 根据对应技术的要求做配置 虽然看起来有点虚,但是确实是这个理儿,下面趁热打铁,再换一个技术,看看是不是上面这两步。 接下来在MyB
阅读全文
摘要:整合MyBatis 整合完JUnit下面再来说一下整合MyBatis,这个技术是大部分公司都要使用的技术,务必掌握。如果对Spring整合MyBatis不熟悉的小伙伴好好复习一下,下面列举出原始整合的全部内容,以配置类的形式为例进行 导入坐标,MyBatis坐标不能少,Spring整合MyBat
阅读全文
摘要:整合JUnit SpringBoot技术的定位用于简化开发,再具体点是简化Spring程序的开发。所以在整合任意技术的时候,如果你想直观感触到简化的效果,你必须先知道使用非SpringBoot技术时对应的整合是如何做的,然后再看基于SpringBoot的整合是如何做的,才能比对出来简化在了哪里。
阅读全文
摘要:SpringBoot基础配置 1.属性配置 SpringBoot通过配置文件application.properties就可以修改默认的配置,那咱们就先找个简单的配置下手,当前访问tomcat的默认端口是8080,好熟悉的味道,但是不便于书写,我们先改成80,通过这个操作来熟悉一下SpringB
阅读全文
摘要:1.SpringBoot入门程序制作(一) 下面让我们开始做第一个SpringBoot程序吧,本课程基于Idea2020.3版本制作,使用的Maven版本为3.6.1,JDK版本为1.8。如果你的环境和上述环境不同,可能在操作界面和操作过程中略有不同,只要软件匹配兼容即可(说到这个Idea和Ma
阅读全文
摘要:MyBatis核心配置文件 mybatis-config.xml Spring整合MyBatis的核心点:将MyBatis核心配置文件中的配置尽可能写入Spring的配置文件中 原MyBatis核心配置文件 mybatis-config.xml <?xml version="1.0" encodin
阅读全文
摘要:Spring与SpringMVC分别各自管理 Service层和 Controller层 spring.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/bea
阅读全文
摘要:IoC容器的创建顺序 Spring 创建 IoC容器管理 Service组件 SpringMVC 创建 IoC容器管理 Controller组件 因为,Controller组件中创建 Service组件作为成员变量,所以,Controller依赖Service,即SpringMVC依赖Spring,
阅读全文
摘要:SpringMVC常用组件 **DispatcherServlet:**前端控制器,不需要工程师开发,由框架提供 作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求 **HandlerMapping:**处理器映射器,不需要工程师开发,由框架提供 作用:根据请求的url、m
阅读全文
摘要:注解配置SpringMVC 使用配置类和注解代替web.xml和SpringMVC配置文件的功能 创建初始化类,代替web.xml 在Servlet3.0环境中,容器会在类路径中查找实现 javax.servlet.ServletContainerInitializer 接口的类,如果找到的话就用它
阅读全文
摘要:异常处理器 SpringMVC默认使用 DefaultHandlerExceptionResolver ,因此,会跳转到出现 404、405等报错页面 基于XML配置的异常处理 SpringMVC提供了一个处理控制器方法执行过程中所出现的异常的接口:HandlerExceptionResolver
阅读全文
摘要:拦截器 拦截器的配置 SpringMVC中的拦截器用于拦截控制器方法的执行 SpringMVC中的拦截器需要实现HandlerInterceptor SpringMVC的拦截器必须在SpringMVC的配置文件中进行配置: <bean class="com.atguigu.interceptor.F
阅读全文
摘要:文件下载 ResponseEntity用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览器的响应报文使用ResponseEntity实现下载文件的功能 ①浏览器触发下载 <a th:href="@{/test/down}">下载图片</a> ②控制器方法 @RequestMapping(
阅读全文
摘要:SpringMVC处理ajax请求 @RequestBody @RequestBody可以获取请求体信息,使用@RequestBody注解标识控制器方法的形参,当前请求的请求体就会为当前注解所标识的形参赋值 <!--此时必须使用post请求方式,因为get请求没有请求体--> <form th:ac
阅读全文
摘要:RESTful简介 REST:Representational State Transfer,表现层资源状态转移。 ①资源 资源是一种看待服务器的方式,即,将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一个抽象的概念,所以它不仅仅能代表服务器文件系统中的一个文
阅读全文
摘要:SpringMVC的视图 SpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户 SpringMVC视图的种类很多,默认有转发视图和重定向视图 当工程引入jstl的依赖,转发视图会自动转换为JstlView 若使用的视图技术为Thymeleaf,在Sprin
阅读全文
摘要:三种域对象:application > session > request request 请求域 使用ServletAPI向request域对象共享数据 @RequestMapping("/testServletAPI") public String testServletAPI(HttpServ
阅读全文
摘要:获取请求携带的三种数据:参数、请求头信息、Cookie @RequestMapping("/param") public String getParam( @RequestParam(value = "userName", required = true, defaultValue = "hello
阅读全文
摘要:@RequestMapping 1. @RequestMapping 标识的位置 @RequestMapping标识一个类:设置映射请求的请求路径的初始信息 @RequestMapping标识一个方法:设置映射请求请求路径的具体信息 作用在类上,表示类中的所有方法都必须有类注解的路径 @Contro
阅读全文
摘要:开发环境 IDEA 2022.1.2 构建工具:Maven 3.8.7 服务器:tomcat 9.0 Spring 版本:5.3.3 JDK 17 创建maven工程 加入web模块 -> web.xml中添加打包方式 <packing>war<packing> pom.xml中引入依赖 <depe
阅读全文
摘要:SpringMVC简介 什么是MVC MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分 M:Model,模型层,指工程中的JavaBean,作用是处理数据 JavaBean分为两类: 一类称为实体类Bean:专门存储业务数据的,如 Student、User 等 一类称为业务处理 Bea
阅读全文
摘要:分页插件 JavaWeb 服务器实现分页需要在SQL中使用 limit ,需要获取 index, pageSize, pageNum 等数据 pageSize:每页显示的条数 pageNum:当前页的页码 index:当前页的起始索引,index=(pageNum-1)*pageSize index
阅读全文
摘要:概念 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源: Java实体类 Mapper接口 Mapper配置文件 基本原理 MyBatis3Simple: 生成基本的CRUD(清
阅读全文
摘要:1. EHCache简介 官网地址:https://www.ehcache.org/ Ehcache is an open source, standards-based cache that boosts performance, offloads your database, and simpl
阅读全文
摘要:二级缓存(手动开启) 这里我们使用的是Mybatis自带的二级缓存,也可以称之为是内置的。 二级缓存是SqlSessionFactory级别,通过同一个SqlSessionFactory创建的SqlSession查询的结果会被缓存;此后若再次执行相同的查询语句,结果就会从缓存中获取 二级缓存开启的条
阅读全文
摘要:一级缓存(默认开启) MyBatis的一级缓存是SqlSession级别的,即通过同一个SqlSession查询的数据会被缓存 再次使用同一个SqlSession查询同一条数据,会从缓存中获取 1、代码验证一级缓存 @Test public void testFirstLevelCache() {
阅读全文
摘要:介绍 理解缓存的工作机制和缓存的用途。 1、缓存机制介绍 2、一级缓存和二级缓存 ①使用顺序 查询的顺序是: 先查询二级缓存,因为二级缓存中可能会有其他程序已经查出来的数据,可以拿来直接使用。 如果二级缓存没有命中,再查询一级缓存 如果一级缓存也没有命中,则查询数据库 SqlSession关闭之前,
阅读全文
摘要:动态SQL Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能,它存在的意义是为了解决拼接SQL语句字符串时的痛点问题。 One of the most powerful features of MyBatis has always been its Dynamic SQL
阅读全文
摘要:一次查询,通过部门 id 查询部门信息以及该部门所有员工信息 方法一:resultMap 中使用 collection 标签,专门处理实体类集合属性的一对多关系 接口类方法 Dept getDeptAndEmpByDeptId(@Param("deptId") Integer deptId); 配置
阅读全文
摘要:多表联查 员工-部门 一对多:员工中有一个属性存储部门对象 部门-员工 多对一:部门中有一个属性存储员工对象集合 一次查询,通过员工 id 查询员工信息以及所在部门信息 方法一:resultMap 逐个配置 字段与属性对象的属性之间的映射关系 接口类声明方法 Emp getEmpAndDeptByE
阅读全文
摘要:字段名与属性名不一致 实体类 public class Emp { private Integer empId; private String empName; private Integer age; private String gender; ... } 接口类 public interfac
阅读全文
摘要:模糊查询,不确定结果数量 使用 List <实体类> public interface SpecialSQLMapper { //通过用户名模糊查询用户信息 List<User> getUserByLike(@Param("mohu") String mohu); } 映射文件 <mapper na
阅读全文
摘要:数据输出 数据输出总体上有两种形式: 增删改操作返回的受影响行数:直接使用 int 或 long 类型接收即可 查询操作的查询结果 1、返回单个简单类型数据 ①Mapper接口中的抽象方法 int selectEmpCount(); ②SQL语句 <select id="selectEmpCount
阅读全文
摘要:数据输入 实际使用时仅需考虑两种情况: 实体类型:接口传参是实体类,则在 SQL语句中直接使用类的属性 #{属性1},#{属性2}... 非实体类型:在接口传参时使用 @Param("key") value注解,则SQL语句中直接使用 #{key} #{}形式 Mybatis会将SQL语句中的#{}
阅读全文
摘要:将常用的固定格式的配置文件添加为IDEA中的模板 Mybatis核心配置文件 mybatis-config.xml Mybatis映射文件 mybatis-mapper.xml 可以在新建文件时直接使用添加的模板 红框中为模板名,而不是文件名
阅读全文
摘要:mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd
阅读全文
摘要:1 创建核心配置文件 其中配置连接数据库的环境 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://mybatis.o
阅读全文
摘要:1、物理建模 CREATE DATABASE `mybatis-example`; USE `mybatis-example`; CREATE TABLE `t_emp`( emp_id INT AUTO_INCREMENT, emp_name CHAR(100), emp_salary DOUBL
阅读全文
摘要:1、总体技术体系 ①单一架构 一个项目,一个工程,导出为一个war包,在一个Tomcat上运行。也叫all in one。 ②分布式架构 一个项目(对应 IDEA 中的一个 project),拆分成很多个模块,每个模块是一个 IDEA 中的一个 module。每一个工程都是运行在自己的 Tomcat
阅读全文
摘要:演示Native Image构建过程 GraalVM安装 (1)下载GraalVM 进入官网下载:https://www.graalvm.org/downloads/ (2)配置环境变量 添加GRAALVM_HOME 把JAVA_HOME修改为graalvm的位置 把Path修改位graalvm的b
阅读全文
摘要:提前编译:AOT AOT概述 JIT与AOT的区别 JIT和AOT 这个名词是指两种不同的编译方式,这两种编译方式的主要区别在于是否在“运行时”进行编译 (1)JIT, Just-in-time,动态(即时)编译,边运行边编译; 在程序运行时,根据算法计算出热点代码,然后进行 JIT 实时编译,这种
阅读全文
摘要:实现自定义校验 第一步 自定义校验注解 import jakarta.validation.Constraint; import jakarta.validation.Payload; import java.lang.annotation.*; @Target({ElementType.METHO
阅读全文
摘要:基于方法实现校验 第一步 创建配置类,配置MethodValidationPostProcessor import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; import org.springfr
阅读全文
摘要:Bean Validation注解实现 使用Bean Validation校验方式,就是如何将Bean Validation需要使用的javax.validation.ValidatorFactory 和javax.validation.Validator注入到容器中。spring默认有一个实现类L
阅读全文
摘要:通过Validator接口实现 引入相关依赖 <dependencies> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>7.
阅读全文
摘要:数据校验:Validation Spring Validation概述 在开发中,我们经常遇到参数校验的需求,比如用户注册的时候,要校验用户名不能为空、用户名长度不超过20个字符、手机号是合法的手机号格式等等。如果使用普通方式,我们会把校验的代码和真正的业务处理逻辑耦合在一起,而且如果未来要新增一种
阅读全文
摘要:Spring6国际化 MessageSource接口 spring中国际化是通过MessageSource这个接口来支持的 常见实现类 ResourceBundleMessageSource 这个是基于Java的ResourceBundle基础类实现,允许仅通过资源名加载国际化资源 Reloadab
阅读全文
摘要:国际化:i18n i18n概述 国际化也称作i18n,其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数。由于软件发行可能面向多个国家,对于不同国家的用户,软件显示不同语言的过程就是国际化。通常来讲,软件中的国际化是通过配置文件来实现的,假设要支撑两种语言
阅读全文
摘要:应用程序上下文和资源路径 概述 不管以怎样的方式创建ApplicationContext实例,都需要为ApplicationContext指定配置文件,Spring允许使用一份或多分XML配置文件。当程序创建ApplicationContext实例时,通常也是以Resource的方式来访问配置文件的
阅读全文
摘要:使用Resource 作为属性 前面介绍了 Spring 提供的资源访问策略,但这些依赖访问策略要么需要使用 Resource 实现类,要么需要使用 ApplicationContext 来获取资源。实际上,当应用程序中的 Bean 实例需要访问资源时,Spring 有更好的解决方法:直接利用依赖注
阅读全文
摘要:ResourceLoaderAware 接口 ResourceLoaderAware接口实现类的实例将获得一个ResourceLoader的引用,ResourceLoaderAware接口也提供了一个setResourceLoader()方法,该方法将由Spring容器负责调用,Spring容器会将
阅读全文
摘要:ResourceLoader 接口 ResourceLoader 概述 Spring 提供如下两个标志性接口: (1)ResourceLoader : 该接口实现类的实例可以获得一个Resource实例。 (2) ResourceLoaderAware : 该接口实现类的实例将获得一个Resourc
阅读全文
摘要:ServletContextResource 这是ServletContext资源的Resource实现,它解释相关Web应用程序根目录中的相对路径。它始终支持流(stream)访问和URL访问,但只有在扩展Web应用程序存档且资源实际位于文件系统上时才允许java.io.File访问。无论它是在文
阅读全文
摘要:FileSystemResource 访问文件系统资源 Spring 提供的 FileSystemResource 类用于访问文件系统资源,使用 FileSystemResource 来访问文件系统资源并没有太大的优势,因为 Java 提供的 File 类也可用于访问文件系统资源。 实验:使用Fil
阅读全文
摘要:ClassPathResource 访问类路径下资源 ClassPathResource 用来访问类加载路径下的资源,相对于其他的 Resource 实现类,其主要优势是方便访问类加载路径里的资源,尤其对于 Web 应用,ClassPathResource 可自动搜索位于 classes 下的资源文
阅读全文
摘要:UrlResource访问网络资源 Resource的一个实现类,用来访问网络资源,它支持URL的绝对路径。 http: 该前缀用于访问基于HTTP协议的网络资源。 ftp: 该前缀用于访问基于FTP协议的网络资源 file: 该前缀用于从文件系统中读取资源 实验:访问基于HTTP协议的网络资源 创
阅读全文
摘要:资源操作:Resources 8.1、Spring Resources概述 Java的标准java.net.URL类和各种URL前缀的标准处理程序无法满足所有对low-level资源的访问,比如:没有标准化的 URL 实现可用于访问需要从类路径或相对于 ServletContext 获取的资源。并且
阅读全文
摘要:基于XML的声明式事务 场景模拟 参考基于注解的声明式事务 与注解管理事务相同的通用步骤 (1) 开启组件扫描 <!--扫描组件--> <context:component-scan base-package="com.atguigu.spring6"></context:component-sca
阅读全文
摘要:全注解配置事务 核心思想:使用配置类替代配置文件 ①添加配置类 package com.atguigu.spring6.config; import com.alibaba.druid.pool.DruidDataSource; import org.springframework.contex
阅读全文
摘要:没有事务时遇到的问题 模拟场景 用户购买图书,先查询图书的价格,再更新图书的库存和用户的余额 假设用户id为1的用户,购买id为1的图书 用户余额为50,而图书价格为80 购买图书之后,用户的余额为-30,数据库中余额字段设置了无符号,因此无法将-30插入到余额字段 此时执行sql语句会抛出SQLE
阅读全文
摘要:声明式事务概念 事务基本概念 ①什么是事务 数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。 ②事务的特性 A:原子性(Atomicity) 一
阅读全文
摘要:JdbcTemplate 简介 Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作 准备工作 ①搭建子模块 搭建子模块:spring-jdbc-tx ②加入依赖 <dependencies> <!--spring jdbc Spring 持久化层支持jar
阅读全文
摘要:单元测试:JUnit 在之前的测试方法中,几乎都能看到以下的两行代码: ApplicationContext context = new ClassPathXmlApplicationContext("xxx.xml"); Xxxx xxx = context.getBean(Xxxx.class)
阅读全文
摘要:基于XML的AOP 准备工作 参考基于注解的AOP环境 实现 在 .xml 文件中对 AOP 进行配置 <context:component-scan base-package="com.atguigu.aop.xml"></context:component-scan> <aop:config>
阅读全文
摘要:### 基于注解的AOP #### 技术说明  是一种设计思想,是软件设计领域中的面向切面编程,它是面向对象编程的一种补充和完善,它以通过预编译方式和运行期动态代理方式实现,在不修改源代码的情况下,给程序动态统一添加额外功能的一种技术。利用AOP可以对业务
阅读全文
摘要:提出问题 ①现有代码缺陷 针对带日志功能的实现类,我们发现有如下缺陷: 对核心业务功能有干扰,导致程序员在开发核心业务功能时分散了精力 附加功能分散在各个业务功能方法中,不利于统一维护 ②解决思路 解决这两个问题,核心就是:解耦。我们需要把附加功能从业务功能代码中抽取出来。 ③困难 解决问题的困难:
阅读全文
摘要:属性注入 @Di 在 AnnotationApplicationContext 的构造方法中调用 loadDi 方法 //属性注入 private void loadDi() { //实例化对象都是在 beanFactory 的map集合中 //1 遍历 beanFactory 的 map集合 Se
阅读全文
摘要:创建注解类 @Bean @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface Bean { } 创建扫描包以及子包、解析注解的 ApplicationContext接口 public inter
阅读全文
摘要:手写IoC 第一步 创建子模块 guigu-spring 第二步 创建测试类 service dao 第三步 创建两个注解 @Bean 创建对象 @Di 属性注入 第四步 创建bean容器接口 ApplicationContext 定义方法,返回对象 第五步 实现bean容器 返回对象 根据包规则加
阅读全文
摘要:回顾Java反射 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。简单来说,反射机制指的是程序在运行时能够获取自身的信息。 要想解剖一个类,必须先要
阅读全文
摘要:Spring全注解开发 全注解开发就是不再使用spring配置文件了,写一个配置类来代替配置文件。 package com.atguigu.spring6.config; import org.springframework.context.annotation.ComponentScan; imp
阅读全文
摘要:@Resource注入 @Resource注解也可以完成属性注入。那它和@Autowired注解有什么区别? @Resource注解是JDK扩展包中的,也就是说属于JDK的一部分。所以该注解是标准注解,更加具有通用性。(JSR-250标准中制定的注解类型。JSR是Java规范提案。) @Autowi
阅读全文
摘要:@Autowired注入 单独使用@Autowired注解,默认根据类型装配。【默认是byType】 查看源码: package org.springframework.beans.factory.annotation; import java.lang.annotation.Documented;
阅读全文
摘要:Annotation 从 Java 5 开始,Java 增加了对注解(Annotation)的支持,它是代码中的一种特殊标记,可以在编译、类加载和运行时被读取,执行相应的处理。开发人员可以通过注解在不改变原有代码和逻辑的情况下,在源代码中嵌入补充信息。 Spring 从 2.5 版本开始提供了对注解
阅读全文
摘要:基于xml自动装配 自动装配: 根据指定的策略,在IOC容器中匹配某一个bean,自动为指定的bean中所依赖的类类型或接口类型属性赋值 ①场景模拟 创建类UserController package com.atguigu.spring6.autowire.controller public cl
阅读全文
摘要:FactoryBean ①简介 FactoryBean是Spring提供的一种整合第三方框架的常用机制。和普通的bean不同,配置一个FactoryBean类型的bean,在获取bean的时候得到的并不是class属性中配置的这个类的对象,而是getObject()方法的返回值。通过这种机制,Spr
阅读全文
摘要:②修改类User public class User { private Integer id; private String username; private String password; private Integer age; public User() { System.out.pri
阅读全文
摘要:bean的作用域 概念 在Spring中可以通过配置bean标签的scope属性来指定bean的作用域范围,各取值含义参加下表: | 取值 | 含义 | 创建对象的时机 | | | | | | singleton(默认) | 在IOC容器中,这个bean的对象始终为单实例 | IOC容器初始化时 |
阅读全文
摘要:不使用外部文件注入方法时,如何连接数据库 @Test public void demo01(){ DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl("jdbc:mysql://localhost:3306/sp
阅读全文
摘要:p命名空间 引入p命名空间 xmlns:p="http://www.springframework.org/schema/p" <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/sc
阅读全文
摘要:context.getBean 获取 bean 的三种方法 根据 id 获取 id 是唯一标识,因此可以获取多实例 bean 对象 根据类型获取 类型只能获取单实例 bean 对象,不能获取多个id 对应一个 class 的bean对象 根据 id+类型 获取 可以获取多实例 bean 对象 //根
阅读全文
摘要:容器:IoC IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。 Spring 通过 IoC 容器来管理所有 Java 对象的实例化和初始化,控制对象与对象之间的
阅读全文
摘要:启用Log4j2日志框架 Log4j2日志概述 在项目开发中,日志十分的重要,不管是记录运行情况还是定位线上问题,都离不开对日志的分析。日志记录了系统行为的时间、地点、状态等相关信息,能够帮助我们了解并监控系统状态,在发生错误或者接近某种危险状态时能够及时提醒我们处理,同时在系统产生问题时,能够帮助
阅读全文
摘要:Spring 基本操作 导入依赖 在 pom.xml 中添加依赖 添加依赖: <dependencies> <!--spring context依赖--> <!--当你引入Spring Context依赖之后,表示将Spring的基础依赖引入了--> <dependency> <groupId>or
阅读全文
摘要:Spring 介绍 最核心模块 IoC:Inverse of Control 控制反转 把创建对象的过程交给 Spring 进行管理 AOP:Aspect Oriented Programming 面向切面编程 代码简化:把方法中固定位置的重复的代码抽取出来,让被抽取的方法更专注于自己的核心功能,提
阅读全文
摘要:生命周期 作用 为了让构建过程自动化完成,Maven 设定了三个生命周期,生命周期中的每一个环节对应构建过程中的一个操作。 三个生命周期 | 生命周期名称 | 作用 | 各个环节 | | | | | | Clean | 清理操作相关 | pre-clean clean post-clean | |
阅读全文
摘要:Maven 聚合 聚合本身的含义 部分组成整体 动画片《战神金刚》中的经典台词:“我来组成头部!我来组成手臂!”就是聚合关系最生动的体现。 Maven 中的聚合 使用一个“总工程”将各个“模块工程”汇集起来,作为一个整体对应完整的项目。 项目:整体 模块:部分 TIP 概念的对应关系: 从继承关系角
阅读全文
摘要:测试依赖的排除 概念 当 A 依赖 B,B 依赖 C 而且 C 可以传递到 A 的时候,A 不想要 C,需要在 A 里面把 C 排除掉。而往往这种情况都是为了避免 jar 包之间的冲突。 所以配置依赖的排除其实就是阻止某些 jar 包的传递。因为这样的 jar 包传递过来会和其他 jar 包冲突。
阅读全文
摘要:测试依赖的传递性 依赖的传递性 概念 A 依赖 B,B 依赖 C,那么在 A 没有配置对 C 的依赖的情况下,A 里面能不能直接使用 C? 传递的原则 在 A 依赖 B,B 依赖 C 的前提下,C 是否能够传递到 A,取决于 B 依赖 C 时使用的依赖范围。 B 依赖 C 时使用 compile 范
阅读全文
摘要:测试依赖的范围 依赖范围 标签的位置:dependencies/dependency/scope 标签的可选值:compile/test/provided/system/runtime/import compile 和 test 对比 | | main目录(空间) | test目录(空间) | 开发
阅读全文
摘要:创建 Maven 版的 Web 工程 说明 使用 mvn archetype:generate 命令生成 Web 工程时,需要使用一个专门的 archetype。这个专门生成 Web 工程骨架的 archetype 可以参照官网看到它的用法: 参数 archetypeGroupId、archetyp
阅读全文
摘要:DOS命令窗口的Maven工程构建操作 要求 运行 Maven 中和构建操作相关的命令时,必须进入到 pom.xml 所在的目录。如果没有在 pom.xml 所在的目录运行 Maven 的构建命令,那么会看到下面的错误信息: The goal you specified requires a pro
阅读全文
摘要:Maven 工程创建 向量 groupId:公司或组织域名的倒序,通常也会加上项目名称 例如:com.atguigu.maven artifactId:模块的名称,将来作为 Maven 工程的工程名 version:模块的版本号,根据自己的需要设定 例如:SNAPSHOT 表示快照版本,正在迭代过程
阅读全文
摘要:Why is Maven? jar包管理 jar 包来源 jar 包间的依赖 构建管理工具 清理:删除上一次构建的结果,为下一次构建做好准备 编译:Java 源程序编译成 *.class 字节码文件 测试:运行提前准备好的测试程序 报告:针对刚才测试的结果生成一个全面的信息 打包 Java工程:ja
阅读全文
摘要:解析请求中的 json 数据,返回 json 数据 1. 加入 Gson.jar 包 2. 通过输入流读取数据,使用 Gson 对象解析字符串 protected void requestBodyJSON(HttpServletRequest request, HttpServletResponse
阅读全文
摘要:1. Vue {{}} - 相当于innerText v-bind:attr 绑定属性值。例如,v-bind:value - 绑定value值 简写: :value v-model 双向绑定 v-model:value , 简写 v-model v-if , v-else , v-show v-if
阅读全文
摘要:原生Ajax - Asynchronous Jsp and Xml 发送异步请求 创建 XMLHttpRequest 对象 var xmlHttpRequest ; function createXMLHttpRequest(){ if(window.XMLHttpRequest){ //符合DOM
阅读全文