Spring
2021-11-15 15:12:42 0 举报
AI智能生成
Spring思维导图
作者其他创作
大纲/内容
IOC
理论
组件化开发
资源获取方向
传统开发:主动向环境索取资源,需要参与资源创建的过程、熟悉细节
基于IOC开发:被动接受环境注入的资源,不需要关心资源创建的细节
bean的生命周期
创建bean的对象
给bean的对象设置属性
bean的后置处理器执行初始化前的操作
需要配置bean的后置处理器
初始化
需要配置初始化方法
bean的后置处理器执行初始化后的操作
需要配置bean的后置处理器
bean可以使用了
IOC容器关闭前执行销毁操作
需要配置销毁方法
内部工厂
BeanFactory
IOC容器内部用来创建bean对象的工厂
FactoryBean
IOC容器用来整合第三方技术的工厂
当我们获取FactoryBean配置的bean时,实际返回的是getObject()方法的返回值
对外接口
ApplicationContext
bean的作用域
bean标签的scope属性
取值:singleton 单实例
IOC容器初始化时创建对象
默认值
取值:prototype 多实例
获取bean的时候创建对象
操作
基于XML配置
配置bean
基础配置
bean标签
id属性
class属性
给bean的属性赋值
property标签:通过setXxx()方法注入数据
name属性:指定属性名,对应setXxx()方法
value属性:使用字面量指定属性值
ref属性:通过bean的id引用另一个bean
内部bean
只能在当前bean范围内使用
可以没有id属性
获取bean
根据bean的id获取
能找到
返回
找不到
抛出异常找不到指定的bean
根据bean的类型获取
判断依据:bean对象 instanceof 指定的类型
true:类型匹配
bean对象唯一
返回
bean对象不唯一
抛出bean不唯一异常
false:类型不匹配
抛出bean找不到异常
AOP应用代理后会有干扰
动态代理
必须用接口类型来获取
使用类类型获取bean找不到
IOC容器中实际上放的是代理对象
cglib
可以(只能)用类类型获取
基于注解开发
标记组件的注解
@Component:表示普通组件
@Controller:表示控制器组件
@Service:表示业务逻辑层组件
@Repository:表示持久化层组件
用注解标记bean之后,bean的id
默认情况:类名首字母小写
在注解中明确设置了bean的id
包扫描
context:component-scan
自动装配
@Autowired
根据当前所需类型查找bean
能找到
找到唯一的bean
装配
找到多个bean
进一步根据id匹配
使用了@Qualifier注解
根据注解指定的值作为id查找
没有使用@Qualifier注解
根据成员变量的名称作为id查找
找不到
装配失败
整合junit
junit4
依赖
spring-test
junit4.12
注解
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
使用value属性指定Spring配置文件位置
junit5
@SpringJUnitConfig
使用locations属性指定Spring配置文件位置
依赖
spring-test
junit-jupiter-api
AOP
套
切面
前置通知
目标方法之前
返回通知
目标方法返回之后
异常通知
目标方法抛出异常之后
后置通知
目标方法最终结束之后
环绕通知
完整的try catch finally结构
切入点表达式
目标方法
代理方式
有接口
动态代理:代理类和被代理的目标类实现同一个接口
没接口
cglib:让代理类继承被代理的目标类
作用
简化代码:把方法内部固定位置的重复代码抽取到切面类中
代码增强:使用封装好的切面,往有需要的目标方法上套
声明式事务
概念
编程式
自己写代码
声明式
我们配置,框架干活
事务属性
只读
超时
回滚和不回滚的异常
隔离级别
传播行为
操作
注解
XML配置文件
数据源
事务管理器
开启基于注解的声明式事务功能
@Transactional
XML
数据源
事务管理器
切入点表达式
事务通知
配置事务属性
0 条评论
下一页