首先謝謝樓主的分享。 但是做為 一個資深spring源碼愛好者,我必須指出,你這篇博客的分析有錯誤的地方: 你說創(chuàng)建proxy代理對象是在這個方法resolveBeforeInstantiation,其實(shí)不是的,你寫的文章也自相矛盾了,如果是這個方法產(chǎn)生代理,那么肯定會掉到Object result = ibp.postProcessBeforeInstantiation(beanClass, beanName);這個方法來, 而你文章的最后分析的確實(shí)public Object postProcessAfterInitialization(Object bean, String beanName) 這個方法的源碼,兩個方法是不同的方法,后者是父接口BeanPostProcessore的方法,前者是子接口InstantiationAwareBeanPostProcessor 的方法。
再者你有沒有想過,如果是在resolveBeforeInstantiation這個方法里面創(chuàng)建了代理實(shí)例,那么被代理類的實(shí)例是在哪里創(chuàng)建的,你要知道代理類中會調(diào)用invocationHandler,而invocationHandler需要調(diào)用被代理類,被代理類實(shí)例都沒創(chuàng)建怎么調(diào)用。
真正產(chǎn)生代理的地方是在被代理類創(chuàng)建完成以后,在initializeBean(beanName, exposedObject, mbd);中創(chuàng)建的,具體是調(diào)用了AbstractAutoProxyCreator.postProcessAfterInitialization這個方法
Spring AOP源碼解讀1 - 程序入口前言 最近看了《從零開始寫JavaWeb框架》,想比較一下Spring AOP的實(shí)現(xiàn)方式和書的上實(shí)現(xiàn)方式有什么不同,所以先把Spring AOP的源碼讀一下,再進(jìn)行比較。 S...