Spring-AOP【四】bean实例化的增强入口分析
引言
在经过构造ClassPathXmlApplicationContext之后,已经解析了spring-config.xml。
1 | ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); |
通过Spring-IOC的分析知道通过实现BeanPostProcessor接口,能在实例化bean之前创建代理,从context中获取实现了BeanPostProcessor接口的实现类:
1 | ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); |
结果:
1 | {"org.springframework.aop.config.internalAutoProxyCreator":{"exposeProxy":false,"frozen":false,"opaque":false,"optimize":false,"order":-2147483648,"proxyTargetClass":false}} |
即注册了AnnotationAwareAspectJAutoProxyCreator。
那具体是什么时候将原始的bean实例增强的呢?
继续看代码:
1 | CustomBean bean = context.getBean("customBean", CustomBean.class); |
发现这一步的时候确实是增强了的,而且取的是缓存中的实例,也就是说在构建ClassPathXmlApplicationContext的时候,就已经做过增强处理了。
通过一步一步的debug,找到了AbstractAutowireCapableBeanFactory类中的applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName)方法:
1 |
|
即通过BeanPostProcessor接口的postProcessAfterInitialization(Object bean, String beanName)方法实现了bean实例的增强。
具体实现就在AnnotationAwareAspectJAutoProxyCreator的父类中。
本篇就分析到这里,找到增强bean实例的确切入口。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ClawHub的技术分享!