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

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

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

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

->AbstractAutoProxyCreator#wrapIfNecessary

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

->AbstractAutoProxyCreator#createProxy

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

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

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

->proxyFactory.getProxy()

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

總結(jié):簡要流程

總結(jié)

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

相關(guān)文章

最新評論

遵化市| 周口市| 绵竹市| 湖北省| 图片| 临海市| 太白县| 瑞昌市| 荔浦县| 固安县| 白河县| 新闻| 达孜县| 伊宁县| 合作市| 梁河县| 山阳县| 泸溪县| 潞城市| 凯里市| 翁源县| 无为县| 织金县| 乌鲁木齐市| 开封县| 闻喜县| 遂平县| 安多县| 永城市| 沈丘县| 西峡县| 蛟河市| 怀宁县| 江门市| 罗平县| 勃利县| 聊城市| 太白县| 镇安县| 体育| 昌平区|