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