最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Aop基本流程原理示例詳解

 更新時(shí)間:2021年04月20日 09:11:20   作者:sun cat  
這篇文章主要給大家介紹了關(guān)于Spring Aop基本流程原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、代理對(duì)象的創(chuàng)建過程:

AbstractAutowireCapableBeanFactory#initializeBean

protectedObjectinitializeBean(StringbeanName,Objectbean,@NullableRootBeanDefinitionmbd){
    if(System.getSecurityManager()!=null){
        AccessController.doPrivileged((PrivilegedAction<Object>)()->{
            invokeAwareMethods(beanName,bean);
            return null;
        },getAccessControlContext());
    }
    else{
        invokeAwareMethods(beanName,bean);
    }
 
    ObjectwrappedBean=bean;
    if(mbd==null||!mbd.isSynthetic()){
        // 執(zhí)⾏所有的BeanPostProcessor#postProcessBeforeInitialization 初始化之前
的處理器⽅法
        wrappedBean=applyBeanPostProcessorsBeforeInitialization(wrappedBean,beanName);
    }
 
    try{
        // 這⾥就開始執(zhí)⾏afterPropertiesSet(實(shí)現(xiàn)了InitializingBean接⼝)⽅法和
        initMethod
        invokeInitMethods(beanName,wrappedBean,mbd);
    }
    catch(Throwableex){
        thrownewBeanCreationException((mbd!=null?            mbd.getResourceDescription():null),beanName,"Invocationofinitmethodfailed",ex);
    }
    if(mbd==null||!mbd.isSynthetic()){
        // 整個(gè)Bean初始化完成,執(zhí)⾏后置處理器⽅法
        wrappedBean=applyBeanPostProcessorsAfterInitialization(wrappedBean,beanName);
    }
 
    return wrappedBean;
}

可以看到有初始化前執(zhí)行的方法、初始化時(shí)執(zhí)行的方法、初始化之后執(zhí)行的方法,我們從初始化之后執(zhí)行的方法入手。

二、applyBeanPostProcessorsAfterInitialization

applyBeanPostProcessorsAfterInitialization()方法的流程如下:

AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsAfterInitialization
->AbstractAutoProxyCreator#postProcessAfterInitialization

applyBeanPostProcessorsAfterInitialization中會(huì)檢查下該類是否已經(jīng)暴露過了(可能已經(jīng)創(chuàng)建了,⽐如A依賴B時(shí),創(chuàng)建A時(shí)候,就會(huì)先去創(chuàng)建B。當(dāng)真正需要?jiǎng)?chuàng)建B時(shí),就沒必要再代理⼀次已經(jīng)代理過的對(duì)象),避免重復(fù)創(chuàng)建。

->AbstractAutoProxyCreator#wrapIfNecessary

得到所有候選Advisor,對(duì)Advisors和bean的⽅法雙層遍歷匹配,最終得到⼀個(gè)List<Advisor>,即specificInterceptors

->AbstractAutoProxyCreator#createProxy

(1)創(chuàng)建代理的⼯作交給ProxyFactory

(2)把指定和通⽤攔截對(duì)象合并, 并都適配成Advisor

(3)上⾯準(zhǔn)備做完就開始創(chuàng)建代理

->proxyFactory.getProxy()

⽤ProxyFactory創(chuàng)建AopProxy, 然后⽤AopProxy創(chuàng)建Proxy, 所以這⾥重要的是看獲取的AopProxy對(duì)象是什么,然后進(jìn)去看怎么創(chuàng)建動(dòng)態(tài)代理, 提供了兩種:jdk proxy, cglib

總結(jié):簡要流程

總結(jié)

到此這篇關(guān)于Spring Aop基本流程原理的文章就介紹到這了,更多相關(guān)Spring Aop流程原理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

方山县| 张北县| 桂阳县| 婺源县| 阿克陶县| 宁津县| 文昌市| 潞西市| 长沙县| 嘉禾县| 西和县| 汉中市| 军事| 棋牌| 濮阳市| 鹤峰县| 昭苏县| 崇义县| 石城县| 逊克县| 常德市| 三门县| 津南区| 万山特区| 平阴县| 自贡市| 宜丰县| 四会市| 印江| 灌云县| 马关县| 新疆| 五寨县| 白银市| 新建县| 偃师市| 洮南市| 汤阴县| 平塘县| 平昌县| 张家界市|