AOP原理
2021-04-13 11:59:53 17 举报
aop原理
作者其他创作
大纲/内容
在别人创建的时候,我们(AnnotationAwareAspectJAutoProxyCreator)就干预了
1.是否切面(false)2.是否跳过 2.1 获取到所有切面的所有增强器 2.2 看是否特殊类3.前置的这个过程都没有干啥事
获取容器中所有的Object类型的组件,挨个判断是否切面
InstantiationAwareBeanPostProcessor.postProcessPropertiesAOP介入了但是没做事
我们的后置处理器创建结束了
MergedBeanDefinitionPostProcessor.postProcessMergedBeanDefinitionAOP和这个没关系
这个家伙第一次运行的时候就会找到切面,并缓存
后置处理(返回代理阶段)
构建增强器(第一次进来,他不知道切面)aspcetJAdvisorBuilder.buildAspectJAdvisors()
AOP后置拦截AspectJAwareAdvisorAutoProxyCreator。postProcessBeforeInstantiation
...
registerBeanPostProcessor(beanFactory);容器刷新十二大步之初始化创建所有的BeanPostProcessor
别人(第一个人)创建对象
HelloService创建对象
AnnotationAwareAspectJAutoProxyCreator.applyBeanPostProcessorsBeforeInstantiation(InstantiationAwareBeanPostProcessor)
AOP在创建其他组件环节
AnnotationAwareAspectJAutoProxyCreator运行流程总结:第一次运行的时候,就把切面信息和增强器(Advisor缓存起来)信息都解析好了,提前保存起来
@EnableAspectJAutoProxy
AutoWired赋值结束了
不需要增强
aspectJAdvisorsBuilder.buildAspectJAdvisors()构建增强器,哪些切面有哪些方法合适运行advisorsCache保存了增强器(通知方法)
getBean创建 AnnotationAwareAspectJAutoProxyCreator的对象
初始化
判断当前类是否有@Aspect注解注解类是否切面
finishBeanFactoryInitialization完成工厂初始化
属性里面用ReflectiveAspectAdvisorFactory(创建增强器的工厂)还要有一个 BeanFactoryAspectJAdvisorsBuilderAdapter(建造者)他们负责保存和产生功能增强器
运行流程,链式执行
判断当前类是否要跳过当前类是否需要增强Bean
AnnotationAwareAspectJAutoProxyCreator这个后置处理器完成了AOP
BeanPostProcessor.postProcessBeforeInitializationAOP也在此工作,直接返回Bean原生对象
解析到配置类的@Import注解
有增强器就为这个对象创建代理
AOP定义阶段
创建代理对象里面保存了很多
1.把所有的增强器再转为真正的方法拦截器2.把增强器(只保存了信息)变成拦截器(能真正执行目标方法)
BeanPostProcessor.postProcessAfterInitializationAOP判断此对象如果有增强方法(有切面切入他)
ConfigurationClassPostProcessor由配置文件解析器对所有配置类进行解析
在初始化期间initalizeBean;准备好了要用的基本对象
别人(第一个人)创建完了,执行初始化环节initializeBean
getBean(HelloService)
否
赋值
invokeBeanFacotoryPostProcessors容器刷新12大步之工厂增强环节
对应
挨个判断所有的增强器的正则是否能切入这个对象
这是拦截器里面的核心;拦截器封装了增强器
他是一个Bean后置处理器,他会干预到每个组件的创建环节
我们的后置处理器AnnotationAwareAspectJAutoProxyCreator创建好了对象,并且在容器中
0 条评论
回复 删除
下一页