Spring5
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 传播行为
当多个事务方法之间调用,如何进行管理事务。