当前位置: 首页 > article >正文

014-spring-aop的原理

1、aop标签找到

2、config

3、parse

这个地方非常重要。

先判断有没有

没有就给 beanDefinitionMap中注入对象

org.springframework.aop.config.internalAutoProxyCreator 是一个beanPostProcessor
org.springframework.aop.config.internalAutoProxyCreator  //是一个beanPostProcessor

org.springframework.aop.config.internalAutoProxyCreator  //是一个beanPostProcessor

非常重要

非常重要

非常重要

非常重要

//AspectJAwareAdvisorAutoProxyCreator 是个啥? 
//从图中看到是一个 BeanPostProcessor
//BeanPostProcessor 就有 方法  postProcessBeforeInitialization   
//                            postProcessAfterInitialization

//后面在 AbstractAutoProxyCreator  找到了方法 postProcessAfterInitialization

public class AspectJAwareAdvisorAutoProxyCreator extends AbstractAdvisorAutoProxyCreator {
	public abstract class AbstractAdvisorAutoProxyCreator extends AbstractAutoProxyCreator {
		public abstract class AbstractAutoProxyCreator extends ProxyProcessorSupport implements SmartInstantiationAwareBeanPostProcessor, BeanFactoryAware {

//综上:
	AspectJAwareAdvisorAutoProxyCreator   extends AbstractAdvisorAutoProxyCreator  extends  AbstractAutoProxyCreator
	AbstractAutoProxyCreator类中重写了方法 postProcessAfterInitialization

后续再跟踪代码

最后在这里找到了代理

总结:

1、提供自动代理的Creator

使用注解的话提供:AnnotationAwareAspectJAutoProxyCreator

使用xml的话提供:AspectJAwareAdvisorAutoProxyCreator

2、bean后置处理器

  AnnotationAwareAspectJAutoProxyCreator 和  AspectJAwareAdvisorAutoProxyCreator 都是一个BeanPostProcessor 

  BeanPostProcessor 就有2个方法:postProcessBeforeInitialization 和postProcessAfterInitialization

3、  再通过 BeanPostProcessor#postProcessAfterInitialization的方法来判断是否是需要给该bean做动态代理


http://www.kler.cn/a/459639.html

相关文章:

  • QML使用Popup实现弹出Message
  • Rockect基于Dledger的Broker主从同步原理
  • 下载linux aarch64版本的htop
  • CSS系列(47)-- Animation Timeline详解
  • 【图像处理】OpenCv + Python 实现 Photoshop 中的色彩平衡功能
  • enzymejest TDD与BDD开发实战
  • Android 转场动画合集
  • WebSocket 的封装使用
  • E卷-恢复数字序列(100分)
  • C语言程序设计:程序设计和C语言
  • 如何判断一个学术论文是否具有真正的科研价值?ChatGPT如何提供帮助?
  • 抽象工厂模式详解
  • 初识 Conda:一站式包管理和环境管理工具
  • Unity3D 基于GraphView实现的节点编辑器框架详解
  • es6 字符串每隔几个中间插入一个逗号
  • 【Cursor编辑器】自用经验和实操(迭代更新)
  • 【MySQL】搞懂mvcc、read view:MySQL事务原理深度剖析
  • Springboot配置文件加载顺序(含Nacos配置)
  • 自动驾驶第一股的转型迷途:图森未来赌上了AIGC
  • 论文阅读《Cross-scale multi-instance learning for pathological image diagnosis》
  • xtuoj 等式
  • python读写文件的三种做法
  • FPGA多路红外相机视频拼接输出,提供2套工程源码和技术支持
  • 【Leetcode 热题 100】17. 电话号码的字母组合
  • 【Golang 面试题】每日 3 题(九)
  • BLIP论文笔记