spring总结
2022-10-19 08:06:25 0 举报
AI智能生成
spring
作者其他创作
大纲/内容
面向切面编程,定义一个切面表达式,只要满足了这个表达式的方法,就可以对这些方法进行增强
什么是AOP?
日志,方法运行时间,代码增强
场景
底层运用了动态代理,如果有接口或者实现了接口,就采用jDK动态代理,否则就采用cglib动态代理
实现原理
实现invocationhandle接口,重写
JDK
CGLIB
day4AOP
两个事务互相嵌套才用传播属性这一说法
如果当前有事务,则加入事务,如果没有事务则创建新事务
require
支持当前事务,如果当前没有事务,就以非事务方式执行。
support
使用当前的事务,如果当前没有事务,就抛出异常。
PROPAGATION_MANDATORY
支持当前事务
新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_REQUIRES_NEW
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
not_support
以非事务方式执行,如果当前存在事务,则抛出异常。
never
不支持当前事务的
spring事务的传播属性?
spring没有事务,都是生成指令到数据库里面,让数据库执行相关指令
事务原理?
原子性
隔离性
持久性
一致性
ACID?
读未提交
读已替吉
可重复读
串行化
隔离级别?
spring事务失效主要是以下方面,一个数据库不支持事务,一个是不能生成动态代理或者生成动态代理缺使用的还是原来的对象,还有就是异常的捕获:
1. 非public方法 事务的实现原理是代理增强,非public不能进行代理增强,不能进行JDK或者CGLIB代理
2. 目标类为final修饰的类
3. 调用本类的方法
4. 抛出捕捉的非RuntimeException,如果想要捕捉所有异常(rollbackFor = {Exception.class})
5. 我们知道事务就是依赖于数据库的,所以数据库不支持肯定也是失效的!!比如myIsam
spring事务何时会失效?
day5 事务
MVC启动流程
默认
单例
BeanFactory
工厂
AOP
代理
Spring中jdbcTemplate、hibernateTemplate等以Template结尾的类,它们就使用到模板模式
模板方法
在Spring MVC中,DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler,解析到对应的Handler(也就是我们常说的Controller控制器)后,开始由HandlerAdapter适配器处理。为什么要在Spring MVC中使用适配器模式?Spring MVC中的Controller种类众多不同类型的Controller通过不同的方法来对请求进行处理,有利于代码的维护拓展。
适配器模式
Spring事件流程总结: 定义一个事件: 实现一个继承自 ApplicationEvent,并且写相应的构造函数; 定义一个事件监听者:实现 ApplicationListener 接口,重写 onApplicationEvent() 方法; 使用事件发布者发布消息: 可以通过 ApplicationEventPublisher 的 publishEvent() 方法发布消息。
观察者
委派
设计模式及地方
@Confgration
@Import
@Condition
配置型注解
@Controller
@Service
@value
默认按类型注入
@Autowire
@Resource
赋值性注解
day1 注解
控制反转,没有IOC之前创建对象是由我们控制的,有了之后将控制权交给IOC,对象的实例化,赋值,初始化,销毁等一系列过程都由IOC进行管理。
什么是IOC?
DI—Dependency Injection,即“依赖注入”,如person.setName(xxx)
构造方法注入,setter注入,基于注解的注入
注入方式
什麽是DI?
用到了那些技術?
4,populatebean就行属性注入
5,调用BeanPostProcessor前置处理方法
6,调用init-mehtod方法
7,调用BeanPostProcessor后置处理方法
8,生成完整的bean对象,通过getBean方法可以直接获取
流程:
1、实例化bean:反射的方式生成对象
6、调用BeanPostProcessor的后置处理方法:spring的aop就是在此处实现的,AbstractAutoProxyCreator 注册Destuction相关的回调接口:钩子函数
7、获取到完整的对象,可以通过getBean的方式来进行对象的获取
8、销毁流程,1;判断是否实现了DispoableBean接口,2,调用destroyMethod方法
bean的生命周期
day2 ioc
什么是循环依赖?什么情况下会发生?
4,实例化
5,将创建A的代理对象的工厂放入三级缓存中(三级缓存的value为objectFactory)
去getBean(B)
实例化
将B的代理对象的工厂加入三级缓存
因为A的工厂已经存在于三级缓存,所以从三级缓存拿到A的代理,并放入到二级缓存中,并删除三级缓存中的A
属性注入A
将代理的A注入到原生的B中
初始化
生成代理的B
将代理的B放到一级缓存,删除创建标识,及二三级缓存
将代理的B注入到原生的A
将代理的A从二级缓存中取出来,将代理的A覆盖原生的A
流程?A与B循环依赖且有代理的情况下
day3 循环依赖
spring总结
0 条评论
回复 删除
下一页