日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AOP原理-创建AOP代理--AnnotationAwareAspectJAutoProxyCreator【InstantiationAwareBeanPostProcessor】的作用

發布時間:2025/4/16 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AOP原理-创建AOP代理--AnnotationAwareAspectJAutoProxyCreator【InstantiationAwareBeanPostProcessor】的作用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

AnnotationAwareAspectJAutoProxyCreator?

InstantiationAwareBeanPostProcessor

* 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)、以后容器中獲取到的就是這個組件的代理對象,執行目標方法的時候,代理對象就會執行通知方法的流程; * * * 3)、目標方法執行 ; * 容器中保存了組件的代理對象(cglib增強后的對象),這個對象里面保存了詳細信息(比如增強器,目標對象,xxx); * 1)、CglibAopProxy.intercept();攔截目標方法的執行 * 2)、根據ProxyFactory對象獲取將要執行的目標方法攔截器鏈; * List<Object> chain = this.advised.getInterceptorsAndDynamicInterceptionAdvice(method, targetClass); * 1)、List<Object> interceptorList保存所有攔截器 5 * 一個默認的ExposeInvocationInterceptor 和 4個增強器; * 2)、遍歷所有的增強器,將其轉為Interceptor; * registry.getInterceptors(advisor); * 3)、將增強器轉為List<MethodInterceptor>; * 如果是MethodInterceptor,直接加入到集合中 * 如果不是,使用AdvisorAdapter將增強器轉為MethodInterceptor; * 轉換完成返回MethodInterceptor數組; * * 3)、如果沒有攔截器鏈,直接執行目標方法; * 攔截器鏈(每一個通知方法又被包裝為方法攔截器,利用MethodInterceptor機制) * 4)、如果有攔截器鏈,把需要執行的目標對象,目標方法, * 攔截器鏈等信息傳入創建一個 CglibMethodInvocation 對象, * 并調用 Object retVal = mi.proceed(); * 5)、攔截器鏈的觸發過程; * 1)、如果沒有攔截器執行執行目標方法,或者攔截器的索引和攔截器數組-1大小一樣(指定到了最后一個攔截器)執行目標方法; * 2)、鏈式獲取每一個攔截器,攔截器執行invoke方法,每一個攔截器等待下一個攔截器執行完成返回以后再來執行; * 攔截器鏈的機制,保證通知方法與目標方法的執行順序;

總結

以上是生活随笔為你收集整理的AOP原理-创建AOP代理--AnnotationAwareAspectJAutoProxyCreator【InstantiationAwareBeanPostProcessor】的作用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。