欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Spring依賴(lài)注入(DI)詳解

一.依賴(lài)簡(jiǎn)介

一個(gè)典型的企業(yè)應用程序不是由一個(gè)單一的對象組成(或Spring的說(shuō)法中的bean)。即使是最簡(jiǎn)單的應用程序也只有幾個(gè)對象一起工作來(lái)呈現最終用戶(hù)看作是一個(gè)連貫的應用程序。如何從定義許多獨立的bean定義到完全實(shí)現的應用程序,在這些應用程序中對象協(xié)作實(shí)現目標。
 有關(guān)spring的設計模式和應用詳情可以參考我這篇文章《spring常用設計模式及應用》

二.依賴(lài)注入

依賴(lài)注入(DI)是一個(gè)過(guò)程,通過(guò)這個(gè)過(guò)程,對象可以通過(guò)構造函數參數,工廠(chǎng)方法的參數或者在構造或返回對象實(shí)例后設置的屬性來(lái)定義它們的依賴(lài)關(guān)系從工廠(chǎng)方法。然后容器在創(chuàng )建bean時(shí)注入這些依賴(lài)關(guān)系。這個(gè)過(guò)程從根本上說(shuō)是相反的,因此名為控制反轉(IoC),它本身通過(guò)使用類(lèi)的直接構造或服務(wù)定位符模式來(lái)控制它自己的依賴(lài)關(guān)系的實(shí)例化或位置。
代碼與DI原則相比更加清晰,當對象提供依賴(lài)時(shí),解耦更為有效。該對象不查找它的依賴(lài)關(guān)系,不知道依賴(lài)關(guān)系的位置或類(lèi)。因此,您的類(lèi)變得更容易測試,特別是當依賴(lài)關(guān)系在接口或抽象基類(lèi)上時(shí),它們允許在單元測試中使用存根或模擬實(shí)現。
DI存在兩種主要的變體,基于構造函數的依賴(lài)注入和基于Setter的依賴(lài)注入

三.基于構造函數的依賴(lài)注入

基于構造器的 DI通過(guò)容器調用具有多個(gè)參數的構造器來(lái)完成,每個(gè)參數表示一個(gè)依賴(lài)關(guān)系。調用static具有特定參數的工廠(chǎng)方法來(lái)構造這個(gè)bean幾乎是等價(jià)的,而且這個(gè)討論同樣將參數作為構造函數和static工廠(chǎng)方法來(lái)處理。以下示例顯示了只能通過(guò)構造函數注入進(jìn)行依賴(lài)注入的類(lèi)。請注意,這個(gè)類(lèi)沒(méi)有什么特別之處,它是一個(gè)POJO,它不依賴(lài)于容器特定的接口,基類(lèi)或注釋。
 

public class SimpleMovieLister {
    private MovieFinder movieFinder;
    public SimpleMovieLister(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
}
}

 

1.構造器參數匹配

構造函數參數解析匹配使用參數的類(lèi)型進(jìn)行。如果bean定義的構造函數參數中沒(méi)有潛在的歧義,那么bean定義中定義構造函數參數的順序就是在實(shí)例化bean時(shí)將這些參數提供給適當構造函數的順序。

package x.y;
public class Foo {
    public Foo(Bar bar, Baz baz) {
        // ...
    }
}

 
沒(méi)有潛在的歧義存在,假設Bar和Baz不是繼承關(guān)系。因此,以下配置好,你不需要指定構造器參數指標明確在<constructor-arg>  索引,類(lèi)型或類(lèi)型。
 

<beans>
    <bean id="foo" class="x.y.Foo">
        <constructor-arg ref="bar"/>
        <constructor-arg ref="baz"/>
    </bean>
    <bean id="bar" class="x.y.Bar"/>
    <bean id="baz" class="x.y.Baz"/>
</beans>

 
在前面的場(chǎng)景中,如果使用類(lèi)型屬性顯式地指定構造函數參數的類(lèi)型,容器可以使用與簡(jiǎn)單類(lèi)型的類(lèi)型匹配。

<bean id="exampleBean" class="examples.ExampleBean">
    <constructor-arg type="int" value="7500000"/>
    <constructor-arg type="java.lang.String" value="42"/>
</bean>

 
使用索引屬性指定顯式構造函數參數的指數。

<bean id="exampleBean" class="examples.ExampleBean">
    <constructor-arg index="0" value="7500000"/>
    <constructor-arg index="1" value="42"/>
</bean>

同樣也可以使用構造器參數名稱(chēng)匹配

<bean id="exampleBean" class="examples.ExampleBean">
    <constructor-arg name="years" value="7500000"/>
    <constructor-arg name="ultimateAnswer" value="42"/>
</bean>

 

2.基于Setter方法

在調用無(wú)參數構造函數或無(wú)參數靜態(tài)工廠(chǎng)方法實(shí)例化bean時(shí),基于bean的調用Setter方法是通過(guò)bean調用Setter方法完成的。
      

public class SimpleMovieLister {
    private MovieFinder movieFinder;
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }
}

 
 
Spring團隊通常提倡構造函數注入,因為它使一個(gè)能夠將應用程序組件作為不可變對象實(shí)現,并確保所需的依賴(lài)項不是null。此外,構造函數注入的組件總是返回到完全初始化狀態(tài)的客戶(hù)機(調用)代碼中。作為一個(gè)方面說(shuō)明,大量的構造函數的參數是一個(gè)糟糕的代碼的氣味,這意味著(zhù)類(lèi)可能有太多的責任和應該被更好的問(wèn)題解決的適當分離。
 
Setter注入應該主要用于可選的依賴(lài)關(guān)系,這些依賴(lài)關(guān)系可以在類(lèi)中分配合理的默認值。否則,非空檢查必須在代碼使用依賴(lài)項的任何地方執行。第=一個(gè)優(yōu)勢就是在于setter方法使該類(lèi)的對象能夠重新配置或重新注入。因此通過(guò)JMX MBean管理是setter注入一個(gè)引人注目的用例.

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
依賴(lài)注入三種方式
【第三章】 DI 之 3.1 DI的配置使用 ——跟我學(xué)spring3
spring的Bean的基礎配置
Spring兩種依賴(lài)注入方式的比較
spring依賴(lài)注入
Spring中XML配置文件的十二個(gè)最佳方法(下)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久