Alan Hou的个人博客

Java Spring 5框架学习笔记

下载最新稳定版

https://repo.spring.io/release/org/springframework/spring/

IOC

IOC 控制反转,降低耦合度,把对象创建和对象调用都交给 Spring

IOC 底层原理:XML 解析、工厂模式、反射

Spring 提供 IOC容器的两种实现方式(接口):

Bean管理

Bean管理XML方式

XML 注入其它类型属性

外部 bean

内部 bean 和级联赋值

XML注入集合属性

注入对象

集合类型提取和注入

Spring 有两种 Bean,一种是普通Bean,另一种是 FactoryBean;普通Bean 配置文件中所定义类型(class 属性)即为返回类型,工厂 Bean 可以为不同(通过实现FactoryBean接口并在 getObject 方法中定义,如下例中对 MyBean 返回 Course对象)。

Bean 的作用域:Bean 可以创建单实例或多实例,默认为单实例,通过 scope 进行设置,单实例为 singleton,多实例为 prototype

单实例、多实例通过实例化多个对象打印地址进行比对

Bean 的生命周期

  1. 通过构造创建Bean 实例(无参构造)
  2. 对 Bean 的属性设置值或对其它 Bean 的引用
  3. 调用 Bean 的初始化方法(自行配置:xml 中的init-method属性)
  4. 使用 Bean
  5. 关闭容器时,调用销毁方法(自行配置:xml 中的destroy-method属性,并且需要执行 context.close()方法)

第3步Bean 的初始化前(postProcessBeforeInitialization)后(postProcessAfterInitialization)分别有一个后置处理器

XML自动装配

根据属性名称(byName)或属性类型(byType)由 Spring 自动匹配进行注入(xml中 bean 标签添加 autowire 属性)

外部属性文件

Bean管理注解方式

格式:@注解名称(属性名称=属性值, 属性名称=属性值…)

通过设置use-default-filters为 false 可不使用默认的 filter(全部导入),如下例中只读取 Controller 注解的类,对应的还有context:exclude-filter用于排除规则

基于注解方式实现属性注入

完全注解开发

即不使用 XML 配置文件

AOP

面向切面编程,对业务逻辑各个部分进行隔离,降低耦合度,提高程序可重用性。

AOP底层使用动态代理:有接口时使用 JDK 动态代理,无接口使用 CGLIB 动态代理。

AOP术语

在 Spring 框架中基于 AspectJ 实现 AOP 操作,可基于 XML配置文件实现,也可基于注解方式实现,通常使用后者。

切入点表达式语法结构:
execution([权限修饰符][返回类型][类全路径][方法名称]([参数列表])),可使用星号 * 表示所有

基于注解方式实现AOP

有多个增强类对同一方法进行增强时,可使用@Order(数字类型值)设置优化级

完全使用注解开发

基于 XML配置文件实现AOP

例创建类 Book,包含方法 buy,增强类 BookProxy 包含前置方法 before(名称可自定义),配置文件示例如下:

JdbcTemplate

配置文件:

Service

Dao

Entity

Test

查询

批量操作batchUpdate

事务操作

ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

Spring 实现事务:

注解声明式事务管理

@Transational 注解可添加到类上,也可添加到方法上

声明式事务管理@Transational的主要参数

XML 声明式事务管理

完全注解声明式事务开发

Spring5新功能

参见https://cntofu.com/book/95/33-what-new-in-the-spring-framework.md

  1. 整个Spring5框架的代码基于Java8,运行时兼容JDK9,许多不建议使用的类和方法在代码库中删除
  2. Spring 5.0框架自带了通用的日志封装;Spring5已经移除Log4jConfigListener,官方建议使用Log4j2
  3. 核心容器支持@Nullable注解
  4. 核心容器支持函数式风格GenericApplicationContext

log4j2.xml

手动输出日志

测试

 

退出移动版