Spring注解驱动开发-part6基于注解的AOP初始化
如何研究AOP原理?
- 看容器中注册了什么组件?
- 这个组件什么时候工作?
- 这个组件的功能是什么?
@EnableAspectJAutoProxy注解初步
- 功能:开启基于AspectJ的自动代理
该注解接口导入了AspectJAutoProxyRegistrar.class
AspectJAutoProxyRegistrar重载了imoportBeanDefnitionRegistrar中的注册bean方法
AnnotationAwareAspectJAutoProxyCreator
尝试升级已有的Bean或注册新的Bean,类型为:AnnotationAwareAspectJAutoProxyCreator
该Bean 的名称为:internalAutoProxyCreator
internalAutoProxyCreator
public class AnnotationAwareAspectJAutoProxyCreator extends AspectJAwareAdvisorAutoProxyCreator {
public class AspectJAwareAdvisorAutoProxyCreator extends AbstractAdvisorAutoProxyCreator {
public abstract class AbstractAdvisorAutoProxyCreator extends AbstractAutoProxyCreator {
注意这里的后置处理接口,以及BeanFactoryAware会设置BeanFactory
public abstract class AbstractAutoProxyCreator extends ProxyProcessorSupport implements SmartInstantiationAwareBeanPostProcessor, BeanFactoryAware {
AbstractAutoProxyCreator有:
setBeanFactory,
postProcessAfterInitialization,
postProcessBeforeInitialization。
AbstractAdvisorAutoProxyCreator有:
重写setBeanFactory,其中调用initBeanFactory
AspectJAwareAdvisorAutoProxyCreator有:
略
AnnotationAwareAspectJAutoProxyCreator有:
重写initBeanFactory
断点设置:
Debug调试到断点:
流程:
this();//无参构造容器
register(componentClasses; //注册组件类
refresh(); //刷新容器,容器中的所有Bean创建出来
注册所有后置处理器,用于拦截bean 的创建
获取ioc容器中已经定义了的需要创建对象的所有BeanPostProcessor
添加其他BeanPostProcessor
优先注册实现了PriorityOrdered接口的BeanPostProcessor
然后注册实现了Ordered接口的BeanPostProcessor
最后注册常规的BeanPostProcessor
创建并获得单实例
第一次get的时候必定需要create,在参数singletonFactory处,使用了匿名类JDK8的最新写法,直接用lambda表达式表示实现了对应接口的匿名类。
创建好之后,在doCreateBean中填充(Populate)Bean
初始化Bean
是否实现了一些Aware接口?
如果是则调用相关方法,注意这里用的if没有else判断!
这里就是Aware接口的一些赋值处理。
接下来在初始化方法invokeInitMethods的前后分别调用:
applyBeanPostProcessorBeforeInitialization,applyBeanPostProcessorAfterInitialization
applyBeanPostProcessorBeforeInitialization 干了啥?
调用BeanPostProcessor接口对应功能!
setBeanFactory,完成AbstractAdvisorAutoProxyCreator的最终注册
- Spring学习-21:Spring的AOP:基于AspectJ的注解开发
- spring-redis缓存方案学习三:基于aop的自定义注解开发
- spring注解驱动开发(AOP功能)
- Spring AOP的基于AspectJ注解开发
- Spring对AOP切面支持实现及示例demo(基于自定义注解实现、代理模式实现、注解驱动、注入式)
- Spring注解驱动开发之AOP
- Spring注解驱动开发-Aop体验
- Spring(十二)AspectJ框架开发AOP(基于注解)
- Spring注解驱动开发-AOP原理简述
- Spring注解驱动开发-AOP(四)
- Spring注解驱动开发-AOP原理详解
- spring中基于注解的aop实用开发
- Spring的基于Aspectj的注解配置的AOP开发
- Spring Aop开发基于AspectJ注解方式的案例
- 走进Spring --- AOP-注解驱动开发
- Spring基于xml配置与注解驱动开发(二)
- 【Spring注解驱动开发】如何使用@Bean注解指定初始化和销毁的方法?看这一篇就够了!!
- Spring注解驱动开发-part7基于注解的声明式事务
- Spring基于xml配置与注解驱动开发(一)
- Intellij IDEA创建Spring项目之基于Aspectj的AOP操作(注解方式)