spring何时为代理创建代理对象
所以大胆猜测,在应用创建目标类时,其实是将目标类进行了处理,将代理类放入了ioc。
下面开始进行验证
1,可以看到,其实ioc注入的的确是代理对象
2, 那我们就往前翻,看看这个代理对象什么时候被创建
3,我们翻到getSingleton 方法,发现singletonFactory.getObject(); 返回了代理对象
4,那就简单了,我们进入singletonFactory.getObject(); 方法
5,我们会发现 doCreateBean 方法会创建正真的代理对象,我们点进去
6,会进到doCreateBean 方法,这个方法调用initializeBean 方法,会得到代理类,我们点进去这个方法
7,initializeBean会对目标类进行相应的包装
8,会发现,实际对目标类进行包装的是AnnotationAwareAspectJAutoProxyCreator 这个后置处理器,我们点进去看看它如何包装目标类
9,最终的代理类选择逻辑如下