亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

簡(jiǎn)化你的 Java 對(duì)象依賴

DangoSky / 3371人閱讀

摘要:通過控制反轉(zhuǎn),對(duì)象在被創(chuàng)建的時(shí)候,由一個(gè)調(diào)控系統(tǒng)內(nèi)所有對(duì)象的外界實(shí)體,將其所依賴的對(duì)象的引用傳遞給它。依賴注入接下來是分析注解和依賴并創(chuàng)建對(duì)象,注入依賴。

控制反轉(zhuǎn)(Inversion of Control,縮寫為IoC),是面向?qū)ο缶幊讨械囊环N設(shè)計(jì)原則,可以用來減低計(jì)算機(jī)代碼之間的耦合度。其中最常見的方式叫做依賴注入(Dependency Injection,簡(jiǎn)稱DI),還有一種方式叫“依賴查找”(Dependency Lookup)。通過控制反轉(zhuǎn),對(duì)象在被創(chuàng)建的時(shí)候,由一個(gè)調(diào)控系統(tǒng)內(nèi)所有對(duì)象的外界實(shí)體,將其所依賴的對(duì)象的引用傳遞給它。也可以說,依賴被注入到對(duì)象中。

前言

以上這段是引用自維基百科的解釋。在采用面向?qū)ο蠓椒ㄔO(shè)計(jì)的系統(tǒng)中,所有的對(duì)象通過彼此間的合作,最終實(shí)現(xiàn)業(yè)務(wù)邏輯。所謂的控制反轉(zhuǎn),即是將我們代碼里面需要實(shí)現(xiàn)的依賴對(duì)象創(chuàng)建及銷毀工作交給一個(gè)容器來實(shí)現(xiàn)。Spring 框架的 IOC 是比較知名,也是應(yīng)用較廣泛的一個(gè)實(shí)現(xiàn)。之前花了段時(shí)間研究了下它的代碼,然后為了好玩兒,自己造了一個(gè)簡(jiǎn)單輪子。

可能會(huì)有人問,你為什么又重復(fù)造輪子呢,已經(jīng)有 Spring 框架可以用啦。我倒不認(rèn)為重復(fù)造輪子是不好的,知道怎么造輪子,并且把輪子造出來對(duì)解決開發(fā)中遇見的問題是非常有幫助的。因?yàn)槟阒浪趺磳?shí)現(xiàn)的,自然就知道去哪里找解決問題的辦法。我認(rèn)為學(xué)習(xí)一個(gè)技術(shù),不僅僅止步于用得熟練,更應(yīng)該深究其原理和實(shí)現(xiàn),從中得到啟發(fā)就更好了。先透露下,我后面會(huì)再分享另外一個(gè)輪子叫 sunflower-mvc,很輕量級(jí)的一個(gè)框架,也會(huì)加入一些最佳實(shí)踐,非常適合寫 API應(yīng)用。下面就進(jìn)入今天的主題:

實(shí)現(xiàn)

今天我們要使用的方法便是依賴注入中的基于注解和set函數(shù)的方式。大致分為以下幾個(gè)步驟:

定義注解類;

掃描指定包路徑下的類;

分析注解和依賴關(guān)系并創(chuàng)建對(duì)象,注入依賴;

BeanFactory 開放獲取類實(shí)例的函數(shù);

定義注解類

首先,我們定義兩個(gè)注解@Bean@Resource,前者用于標(biāo)注一個(gè)對(duì)象需要容器管理,后者用于標(biāo)注所依賴的對(duì)象。注解@Bean的值不允許為空,@Resource的值可以為空(則使用字段名稱)。至于關(guān)于注解的語法,請(qǐng)自行查詢相關(guān)資料。

掃描類

然后就是掃描指定包下的類,這段代碼比較長(zhǎng),從 Spring 源碼中直接拿過來復(fù)用的??偨Y(jié)來說,通過遞歸掃描指定包路徑下的文件把你要進(jìn)行依賴注入的所有Class加入一個(gè)Set集合中,后面會(huì)遍歷這個(gè)集合并分析每個(gè)類的依賴關(guān)系。

依賴注入

接下來是分析注解和依賴并創(chuàng)建對(duì)象,注入依賴。

遍歷類集合,如果檢測(cè)到有@Bean注解則實(shí)例化對(duì)象存放到Map中,然后繼續(xù)掃描該類下的所有field,如果發(fā)現(xiàn)@Resource注解則記錄依賴值Map中。

然后遍歷依賴關(guān)系Map,進(jìn)行依賴注入。

BeanFactory

再提供一個(gè)函數(shù)用于從工廠中獲取Bean對(duì)象。

測(cè)試

在com.mlongbo.sunflower.ioc.bean包中定義兩個(gè)Bean:

最后再寫個(gè)例子單元測(cè)試下:

結(jié)尾

至此,大功告成~ 如果有錯(cuò)誤和需要完善的地方還請(qǐng)指正,也歡迎你到Github參與討論。完整代碼請(qǐng)查看 GitHub倉庫。

點(diǎn)擊 {鏈接},訪問項(xiàng)目主頁。

掃描二維碼,關(guān)注我。

內(nèi)容大多會(huì)是后端技術(shù)、前端工程、DevOps,偶爾會(huì)有一些大數(shù)據(jù)相關(guān),會(huì)推薦一些好玩的東西。希望你會(huì)喜歡~

一切,源于喜歡。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/65826.html

相關(guān)文章

  • Spring之旅第二站:bean、新特性。。。

    摘要:除了,還簡(jiǎn)單介紹了對(duì)的支持,可以幫助應(yīng)用將散落在各處的邏輯匯集于一處切面。當(dāng)裝配的時(shí)候,這些切面能夠運(yùn)行期編織起來,這樣就能呢個(gè)非常有效的賦予新功能。 第1章 Spring之旅 說明 1、本文參考了《Spring 實(shí)戰(zhàn)》重點(diǎn)內(nèi)容,參考了GitHub上的代碼 2、每個(gè)人的學(xué)習(xí)方式不一樣,但目的是一樣的,活學(xué)活用。最近一直在聽《我們不一樣》 3、本文只為記錄作為以后參考,要想真正領(lǐng)悟Sp...

    luodongseu 評(píng)論0 收藏0
  • Spring之旅 - 3.0、3.1、4.0導(dǎo)引

    摘要:之旅簡(jiǎn)化開發(fā)的使命簡(jiǎn)化開發(fā)為了降低開發(fā)的復(fù)雜性,采取如下關(guān)鍵策略基于的輕量級(jí)和最小侵入性編程通過依賴注入和面向接口實(shí)現(xiàn)松耦合基于切面和慣例進(jìn)行聲明式編程通過切面和模版減少樣式代碼依賴注入耦合性具有兩面性一方面,緊密耦合的代碼難以測(cè)試難以復(fù) Spring之旅 簡(jiǎn)化Java開發(fā) Spring的使命:簡(jiǎn)化Java開發(fā) 為了降低Java開發(fā)的復(fù)雜性,采取如下關(guān)鍵策略:基于POJO的輕量級(jí)和最...

    leon 評(píng)論0 收藏0
  • Spring之旅第一站(不得不佩服老外...)

    摘要:表示少女與緊耦合在它的構(gòu)造函數(shù)中自行創(chuàng)建了。面向切面編程往往被定義為促使軟件系統(tǒng)實(shí)現(xiàn)關(guān)注點(diǎn)的分離一項(xiàng)技術(shù)系統(tǒng)由許多不同的組件組成,每個(gè)組件各負(fù)責(zé)一特定的功能。我們可以把切面想象為覆蓋在很多組件之上的一個(gè)外殼。 第1章 Spring之旅 說明 1、本文抄寫了《Spring 實(shí)戰(zhàn)》重點(diǎn)內(nèi)容,參考了GitHub上的代碼 2、每個(gè)人的學(xué)習(xí)方式不一樣,但目的是一樣的,活學(xué)活用。最近一直在聽《我...

    thekingisalwaysluc 評(píng)論0 收藏0
  • 后端好書閱讀與推薦(續(xù)二)

    摘要:后端好書閱讀與推薦系列文章后端好書閱讀與推薦后端好書閱讀與推薦續(xù)后端好書閱讀與推薦續(xù)二幾個(gè)月又過去了,又讀了幾本書,同時(shí)為了深切體會(huì)到某些書里面的要點(diǎn)還專門做了一個(gè)小項(xiàng)目,這里就把讀書與小項(xiàng)目過程中的一些心得體會(huì)記錄一下。 后端好書閱讀與推薦系列文章:后端好書閱讀與推薦后端好書閱讀與推薦(續(xù))后端好書閱讀與推薦(續(xù)二) 幾個(gè)月又過去了,又讀了幾本書,同時(shí)為了深切體會(huì)到某些書里面的要點(diǎn)還...

    Jioby 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<