創建代理器
AbstractAutowireCapableBeanFactory#doCreateBean
是獲取bean的方法->AbstractAutowireCapableBeanFactory#initializeBean
方法->
applyBeanPostProcessorsBeforeInitialization
invokeInitMethods
applyBeanPostProcessorsAfterInitialization
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsAfterInitialization
->
org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#postProcessAfterInitialization
->
org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#wrapIfNecessary
包裝bean->
org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#createProxy
創建代理對象->
proxyFactory
org.springframework.aop.framework.ProxyFactory#getProxy(java.lang.ClassLoader)
獲取apoProxy ->org.springframework.aop.framework.ProxyCreatorSupport#createAopProxy
獲取創建代理對象的factory ->org.springframework.aop.framework.DefaultAopProxyFactory#createAopProxy
創建代理對象的factory ->
org.springframework.aop.framework.JdkDynamicAopProxy#getProxy(java.lang.ClassLoader)
真正創建代理對象的方法(只看jdk的)->
調用具體的方法
org.springframework.aop.framework.JdkDynamicAopProxy#invoke
代理對象的回調函數 ->
因爲
JdkDynamicAopProxy
實現了InvocationHandler
,所以只要找到當前類的invoke就可以了
org.springframework.aop.framework.adapter.DefaultAdvisorAdapterRegistry
類實現,並且保存到緩存
MethodBeforeAdviceAdapter
之前的操作AfterReturningAdviceAdapter
之後的操作ThrowsAdviceAdapter
異常的操作發起通知
org.springframework.aop.framework.ReflectiveMethodInvocation#proceed
反射執行調用