如何理解AOP
面向切面编程
如何理解AOP思想
1.面向切面编程;
2.好处:不改变原有业务逻辑方法前提下,进行增强 ;解耦,有利于维护代码;
3.切面 、通知 、 连接点 、 切入点
AOP原理
1.动态代理设计模式;
2.AbstractAutoProxyCreator -> postProcessAfterInitialization(),在“初始化后”进行代理操作,对目 标对象进行增强处理;
3.默认使用JDK动态代理,若没有出现接口 或者 开启动态代理时设置属性则转而使用CGLIB代理.
AOP的好处
每个事物逻辑位于一个位置, 代码不分散, 便于维护和升级;
业务模块更简洁, 只包含核心业务代码.
AOP的实现原理
在bean实例初始化后(postProcessAfterInitialization())进行动态代理操作,对目标对象进行增强处理,默认使用的动态代理模式为jdk动态代理,开启动态代理时设置属性则转而使用CGLIB代理。
使用场景:环绕通知等;
作用:实现日志输出等;
三级缓存
循环依赖问题
出现原因:A属性注入B , B属性注入A,出现循环依赖;
解决思路:Spring通过三级缓存解决;
为什么要设计二级缓存
确保多个类装配同一个属性时,获取到的实例(代理对象)是同一个;
为什么要设计三级缓存
保存bean创建工厂(ObjectFactory),包含beanName,bean,BeanDefinition,以便于创建代理对象;