Spring5 学习历程
Spring5 概述

Spring5 初体验
Spring5 最基础的 jar 包

Spring5 xml 配置

在测试包下创建对象

输出效果

IOC 容器


IOC 底层原理



IOC 接口



Bean 管理
Bean 管理指的是两个操作:
- Spring 创建对象
- Spring 注入属性
基于 XML 方式
创建对象

创建对象时,默认也是执行空参构造器。
基于 XML 方式注入属性
DI:依赖注入,就是注入属性。
set 方法注入属性

有参构造器注入属性

p 名称空间注入(简化的 set 方法注入)


注入 null 或特殊符号

注入外部 bean
创建两个类,service 里调用 dao 的方法,且 service 里一个 dao 的成员属性。

注入内部 bean
创建两个类,同样是一个类的成员变量是另一个类。

级联注入


数组、集合注入

集合中存储自定义类

集合的复用


工厂 Bean



Bean 的作用域
在 Spring 中可以设置创建的 bean 实例是单实例还是多实例。
Spring中默认是单实例。


在 Spring 修改为多实例。




Bean 的生命周期
- 执行无参构造器创建 bean 实例
- 调用 set 方法设置属性值
- 执行初始化方法之前的方法(后置处理器)
- 执行初始化方法
- 执行初始化之后的方法(后置处理器)
- 获取到创建的 bean 实例
- 执行销毁方法





自动转配
根据指定装配规则(通过属性名或通过属性类型),Spring 将自动地将匹配的属性值进行注入。



引入外部配置文件


基于注解方式
注解是代码特殊标记,格式:@注解名称(属性名=属性值, 属性名=属性值, ...)
使用注解可以简化 xml 的配置。
Spring 针对 Bean 管理中创建对象提供的注解
@Component@Service@Controller@Repository
上面 4 个注解功能是一样的,都可以用来创建 Bean 对象。
首先需要引入 AOP 的依赖。




组件扫描的详细配置

Bean 属性注入注解
@AutoWired根据类型注入@Qualifier基于上面注解根据名称注入@Resource可以根据类型也可以根据名称(Spring 不推荐使用,因为是 javax 包下的注解)@Value注入普通类型




完全注解开发
创建一个类代替 Spring 的 xml 配置文件。


AOP
AOP 概述


AOP 底层原理
AOP 底层使用了动态代理,而动态代理有两种:
- 有接口的情况
- 无接口的情况


JDK 动态代理的实现
首先创建一个接口和一个实现类。


创建一个类实现 InvocationHandler 接口并且实现方法,在里面可以调用被代理类的方法,实现方法的增强。


运行输出。

AOP 术语
- 连接点
- 切入点
- 通知(增强)
- 切面

AOP 准备

引入依赖。



AOP 操作
基于注解方式
首先创建两个类,代理类和被代理类。


在 xml 配置文件中引入名称空间,开启注解扫描、开启 Aspect 生成代理对象。。


在代理类和被代理类上添加 Bean 注解,使其可以创建 Bean 对象。
在代理类上添加注解 @Aspect ,生成代理对象。

在增强类的方法上添加注解,使用通知类型注解,使用切入点表达式配置。

运行代码(不抛出异常):


运行代码(抛出异常):


将相同的切入点提取
创建一个方法,在方法上面添加注解 @Pointcut(value = "抽取出的切入点表达式)

多个增强类的优先级
对于一个被代理类,如果有多个增强类,可以定义增强类的执行顺序,使用 @Order(value = 数值) 数字越小优先权越高。

运行代码执行:

基于 XML 配置文件方式


完全注解开发
创建一个配置类,添加配置注解、开启注解扫描、开启 Aspect。

创建代理类、被代理类。


测试代码,运行结果:

JdbcTemplate
准备工作
引入相关的 JAR 包

配置数据库连接池:

配置 JdbcTemplate 对象,注入 DataSource:

开启组件扫描,使用注解的方式管理 Bean 对象:

创建 Service 类、Dao 类,在 Dao 注入 JdbcTemplate 对象:


JdbcTemplate 操作
创建一个数据表:

创建对应的 JavaBean:

在 BookDao 层里创建添加方法:

测试:


更新和删除


查询
查询返回某个值

测试:

查询返回实体类对象


查询返回 List 集合


批量添加


批量更新、删除





事务操作


Spring 提供的事务管理的一套 API:

声明式事务管理
基于注解




参数配置
Transactional 注解里面的参数:

propagation 传播行为
当多个事务方法之间调用,如何进行管理事务。



isolation 隔离级别




基于 XML 配置文件方式

完全注解开发
创建一个 TransactionConfig 的配置类:

测试:

Spring5 新特性
整个 Spring5 框架的代码基于 Java8,运行时兼容 JDK9,许多不建议使用的类和方法在代码库中删除。
Spring5 框架自带通用的日志封装
Spring5 已经移除 Log4jConfigListener,官方建议使用 Log4j2
引入 jar 包依赖

创建 log4j.xml

创建 Log4jTest 类

Nullable 注解

函数式注册对象
Spring5 核心容器支持函数式风格 GenericApplicationContext :

Spring5 整合 JUnit4
引入 jar 包:

创建一个测试配置类,使用注解的方式:

Spring5 整合 JUnit5
引入 JUnit5 的依赖:

