Spring原始碼解析(十五)——AOP原理——建立aop代理
* AnnotationAwareAspectJAutoProxyCreator【InstantiationAwareBeanPostProcessor】 的作用:
* 1)、每一個bean建立之前,呼叫postProcessBeforeInstantiation();
* 關心MathCalculator和LogAspect的建立
* 1)、判斷當前bean是否在advisedBeans中(儲存了所有需要增強bean)
* 2)、判斷當前bean是否是基礎型別的Advice、Pointcut、Advisor、AopInfrastructureBean,
* 或者是否是切面(@Aspect)
* 3)、是否需要跳過
* 1)、獲取候選的增強器(切面裡面的通知方法)【List<Advisor> candidateAdvisors】
* 每一個封裝的通知方法的增強器是 InstantiationModelAwarePointcutAdvisor;
* 判斷每一個增強器是否是 AspectJPointcutAdvisor 型別的;返回true
* 2)、永遠返回false
*
* 2)、建立物件
* postProcessAfterInitialization;
* return wrapIfNecessary(bean, beanName, cacheKey);//包裝如果需要的情況下
* 1)、獲取當前bean的所有增強器(通知方法) Object[] specificInterceptors
* 1、找到候選的所有的增強器(找哪些通知方法是需要切入當前bean方法的)
* 2、獲取到能在bean使用的增強器。
* 3、給增強器排序
* 2)、儲存當前bean在advisedBeans中;
* 3)、如果當前bean需要增強,建立當前bean的代理物件;
* 1)、獲取所有增強器(通知方法)
* 2)、儲存到proxyFactory
* 3)、建立代理物件:Spring自動決定
* JdkDynamicAopProxy(config);jdk動態代理;
* ObjenesisCglibAopProxy(config);cglib的動態代理;
* 4)、給容器中返回當前元件使用cglib增強了的代理物件;
一路返回
* 5)、以後容器中獲取到的就是這個元件的代理物件,執行目標方法的時候,代理物件就會執行通知方法的流程;
*