欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > Spring AOP代理对象生成原理

Spring AOP代理对象生成原理

2025/6/9 17:36:21 来源:https://blog.csdn.net/qq_38621053/article/details/142166576  浏览:    关键词:Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】,这个类继承了【BeanPostProcessor】是一个后置处理器

在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时判断是否有对bean对象切入的通知,如果有则生成代理对象

那么【AnnotationAwareAspectJAutoProxyCreator】这个类是如何放到后置处理器的集合中的呢?

带着疑问我跟了下【org.springframework.beans.factory.support.AbstractBeanFactory#getBeanPostProcessors】发现【org.springframework.beans.factory.support.AbstractBeanFactory#beanPostProcessors】是一个集合,所以我找到了【java.util.List#add(E)】方法来继续跟踪

源头是【org.springframework.context.support.AbstractApplicationContext#registerBeanPostProcessors】

实际上是获取bean名称,通过bean名称来获取bean对象,最后注册该bean对象为后置处理器,那么这个bean名称是从哪里获取的呢?

源头是【org.springframework.beans.factory.ListableBeanFactory#getBeanNamesForType(java.lang.Class<?>, boolean, boolean)】,那么继续跟踪这个方法,有一个叫做【org.springframework.aop.config.internalAutoProxyCreator】的bean名称,就是通过这个bean名称生成的【AnnotationAwareAspectJAutoProxyCreator】,那么这个bean名称到底是哪来的呢?

跟踪得知是通过【org.springframework.beans.factory.support.DefaultListableBeanFactory#beanDefinitionNames】获得的

找到该集合的add方法所在的方法打断点后跟踪后得知实际上是通过【org.springframework.context.annotation.AspectJAutoProxyRegistrar】注册进去的

那么【org.springframework.context.annotation.AspectJAutoProxyRegistrar】又是如何触发的呢?经过跟踪在springboot启动后解析自动配置时去递归寻找【@Import】注解里导入的类并进行处理

源头

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词