spring总体介绍
树图思维导图提供 spring 在线思维导图免费制作,点击“编辑”按钮,可对 spring 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:d690a98927326b1178395d45682360cc
spring思维导图模板大纲
概念:其实就是控制反转,把spring的一些Bean,交给spring容器去管理
容器种类
BeanFactory
spring最基本的容器
BeanFactory和FactoryBean的区别:
BeanFactory是spring用来管理和装配普通bean的ioc容器。
FactoryBean是个bean,在IOC容器的基础上给Bean的实现加上了一个简单工厂模式和装饰模式,是一个可以生产对象和装饰对象的工厂bean
ApplicationContext
spring的高级容器,继承了BeanFactory
IOC的创建过程
ioc是用来管理bean的,所以他的创建过程也包含了bean的创建过程
在对空间中初始化一块区域,作为容器创建的准备工作
通过BeanDefinitionReader,解析各种格式的Bean定义信息,存放到BeanDefinitionMap
执行BeanFactory的增强接口,BeanFactoryPostProcessor
开始实通过反射实例化Bean
填充Bean的属性,这里就涉及到三级缓存的概念
执行实现的Aware相关接口
执行BeanPostProcessor的前置增强方法Before
执行实现的初始化方法
执行BeanPostProcessor的后置增强方法After,AOP就是在这一步进行的扩展
此时的Bean就创建完成了,存放到spring的单例池中
当ioc容器销毁时,执行实现的相关销毁接口
概念:面向切面编程,将非业务,可重用的功能性代码,封装成一个切面,方便其他业务模块调用
原理:代理模式:创建一个代理对象,去帮目标对象实现和扩展功能
静态代理:编译时就进行代理,但是每个需要代理的对象都要重复编写代理类
动态代理:运行时开始利用反射代理目标对象
JDK动态代理
只能代理接口
CGLIB动态代理
可以代理接口,也可以代理目标类
工作流程:初始化ioc容器 —> 完成所有Bean的实例和初始化 —> 在bean后置处理器中完成AOP功能的扩展 —> 检测需要代理的advice —> 创建代理对象
应用场景:
可以拦截指定的方法,并且对方法增强,比如:事务、日志、权限、性能监测等增强,而且无需侵入到业务代码中,使业务与非业务处理逻辑分离
三级缓存是为了解决循环依赖
解决循环依赖过程:实例化A时,发现依赖B —> 将A存放至三级缓存,去实例化B —> 发现依赖A,从三级缓存中去除A,放入二级缓存,并完成B的实例化,将B放入一级缓存 —> 继续完成A的实例化,并将A从二级缓存中删除,放入一级缓存
为什么非要三级缓存,不能是二级缓存:多一级缓存是为了存放代理对象,避免代理对象将目标对象覆盖,导致多线程场景异常
spring源码分析
声明式事务
@Transactional注解来实现
spring会对声明了该注解的方法的类,创建一个动态代理对象,对其方法开始前创建一个事务进行拦截,没有异常,才提交事务
编程式事务
事务失效场景:
方法修饰符非public,或者被static修饰,,或者被final修饰
抛出的异常不是事务支持的异常
涉及到数据库,但数据库本身不支持事务
事务方法所在类没有被spring容器管理
本身非事务方法调用事务方法:由于声明式事务原理是AOP,需要创建代理对象,而自身没办法代理自身
数据源没有配置事务管理器
工厂模式:ioc容器的BeaFactory,典型的工厂模式,好处是提高灵活性,更方便实例化对象,也增加了扩展性
单例模式:spring ioc管理的普通bean,默认为单例模式,好处是可以控制Bean实例的数量,节约资源
代理模式:spring的AOP是典型的代理模式,好处是可以隐藏原始目标的复杂性,也可以代理增加扩展性
策略模式:在实例化对象的时候使用到策略模式,根据是否实现不同接口执行不同策略
模板方法:spring中的jdbcTemplate
适配器模式:spring中AOP的通知功能,用到适配器模式
观察者模式:spring中的各种监听器,就是用到的观察者模式,当状态发生变化时,触发
优点
声明式事务的支持、方便解耦,简化开发、AOP编程的支持,方便的实现对程序进行权限拦截、运行监控等功能、高可扩展性
缺点
配置繁琐、Spring依赖反射,反射影响性能、增加学习成本
树图思维导图提供 SpringBootWeb请求响应 在线思维导图免费制作,点击“编辑”按钮,可对 SpringBootWeb请求响应 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:1c6ee1ff958a0c7c2fabdf9e9f8d755e
树图思维导图提供 贫瘠的春天 (Barren Spring) 在线思维导图免费制作,点击“编辑”按钮,可对 贫瘠的春天 (Barren Spring) 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:4029a74d605c7f8721963c42b43de9a9