1. 程式人生 > >Spring原始碼解析(十五)——AOP原理——建立aop代理

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)、以後容器中獲取到的就是這個元件的代理物件,執行目標方法的時候,代理物件就會執行通知方法的流程;
 *