240 发简信
IP属地:湖南
  • 首先谢谢楼主的分享。 但是做为 一个资深spring源码爱好者,我必须指出,你这篇博客的分析有错误的地方: 你说创建proxy代理对象是在这个方法resolveBeforeInstantiation,其实不是的,你写的文章也自相矛盾了,如果是这个方法产生代理,那么肯定会掉到Object result = ibp.postProcessBeforeInstantiation(beanClass, beanName);这个方法来, 而你文章的最后分析的确实public Object postProcessAfterInitialization(Object bean, String beanName) 这个方法的源码,两个方法是不同的方法,后者是父接口BeanPostProcessore的方法,前者是子接口InstantiationAwareBeanPostProcessor 的方法。

    再者你有没有想过,如果是在resolveBeforeInstantiation这个方法里面创建了代理实例,那么被代理类的实例是在哪里创建的,你要知道代理类中会调用invocationHandler,而invocationHandler需要调用被代理类,被代理类实例都没创建怎么调用。

    真正产生代理的地方是在被代理类创建完成以后,在initializeBean(beanName, exposedObject, mbd);中创建的,具体是调用了AbstractAutoProxyCreator.postProcessAfterInitialization这个方法

    Spring AOP源码解读1 - 程序入口

    前言 最近看了《从零开始写JavaWeb框架》,想比较一下Spring AOP的实现方式和书的上实现方式有什么不同,所以先把Spring AOP的源码读一下,再进行比较。 S...