創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),阿魯科爾沁企業(yè)網(wǎng)站建設(shè),阿魯科爾沁品牌網(wǎng)站建設(shè),網(wǎng)站定制,阿魯科爾沁網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,阿魯科爾沁網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。這篇文章主要介紹Spring bean對(duì)象實(shí)例化的案例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
好了 我們聊聊 Bean 的實(shí)例化過(guò)程的幾個(gè)重要角色
BeanDefinitionRegistryPostProcessor 接口
Refresh().invokeBeanFactoryPostProcessors 這個(gè)方法里面。
BeanDefinitionRegistryPostProcessor 這個(gè)接口的調(diào)用分為三部:
1、調(diào)用實(shí)現(xiàn)了 PriorityOrdered 排序接口
2、調(diào)用實(shí)現(xiàn)了 Ordered 排序接口
3、沒(méi)有實(shí)現(xiàn)接口的調(diào)用
這個(gè)接口我的理解:獲取 BeanDefinitionRegistry 對(duì)象,獲取到這個(gè)對(duì)象就可以獲取這個(gè)對(duì)象中注冊(cè)的所有 BeanDefinition 對(duì)象,所以我們知道了,我們擁有這個(gè)對(duì)象就可以完成里面所有 BeanDefinition 對(duì)象的修改新增操作
BeanPostProcessor 的注冊(cè)
Refresh().registerBeanPostProcessors 這個(gè)方法里面。
拿到 BeanFactory 中所有注冊(cè)的 BeanDefinition 對(duì)象的名稱 beanName。
然后判斷是否實(shí)現(xiàn)了 PriorityOrdered 排序接口,Ordered 排序接口,getBean 是將該 ppName 對(duì)應(yīng)的 BeanDefinition 對(duì)象實(shí)例化。
把對(duì)應(yīng)的 BeanPostProcessor 對(duì)象注冊(cè)到 BeanFactory 中,BeanFactory 中有一個(gè)list 容器接收。getSingleton 方法代碼位置:AbstractBeanFactory.doGetBean 方法中
方法里面核心要點(diǎn):
把 beanName 添加到 singletonsCurrentlyInCreation Set 容器中,在這個(gè)集合里面的 bean 都是正在實(shí)例化的 bean,就是實(shí)例化還沒(méi)做完的 BeanName
調(diào)到 getObject 方法,完成 bean 的實(shí)例化。接下來(lái)
getObject 調(diào)用完后,就代表著 Bean 實(shí)例化已經(jīng)完成了,這時(shí)候就需要
1、singletonsCurrentlyInCreation 把 beanName 從這個(gè)集合中刪除
2、addSingleton,把 bean 緩存到一級(jí)緩存中
createBean
方法代碼位置:AbstractBeanFactory.doGetBean 方法中
這個(gè)方法是 bean 實(shí)例化核心方法
實(shí)例化方法,把 bean 實(shí)例化,并且包裝成 BeanWrapper點(diǎn)進(jìn)這個(gè)方法里面。
這個(gè)方法是反射調(diào)用類中的 factoryMethod 方法。這要知道@Bean 方法的原理,實(shí)際上spring 會(huì)掃描有@bean 注解的方法,然后把方法名稱設(shè)置到 BeanDefinition 的 factoryMethod屬性中,接下來(lái)就會(huì)調(diào)到上面截圖中的方法實(shí)現(xiàn)@Bean 方法的調(diào)用。該方法里面的參數(shù)解析過(guò)程不需要了解。
determineConstructorsFromBeanPostProcessors
這個(gè)方法是 BeanPostProcessor 接口類的首次應(yīng)用,最終會(huì)掉到AutowiredAnnotationBeanPostProcessor 類的方法,在方法中會(huì)掃描有注解的構(gòu)造函數(shù)然后完成裝配過(guò)程。
以上是Spring bean對(duì)象實(shí)例化的案例分析的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!
網(wǎng)站欄目:Springbean對(duì)象實(shí)例化的案例分析-創(chuàng)新互聯(lián)
鏈接URL:http://www.rwnh.cn/article8/cepiop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站維護(hù)、面包屑導(dǎo)航、外貿(mào)建站、虛擬主機(jī)、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容