创建代理器
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
反射执行调用