spring依賴注入方式

來源:互聯網
上載者:User

一、依賴注入簡介

     依賴注入背後的基本原理是對象之間的依賴關係,可以通過以下幾種方式來實現:構造器的參數、Factory 方法的參數。分別是由建構函式或者Factory 方法來建立對象並且設定屬性。因此,容器的主要工作可以理解為建立bean時注入那些依賴關係。相對於由bean自己來控制其執行個體化、直接在構造中指定依賴關係這種自主控制依賴關係注入的方式來說,是從根本上發生了倒轉,因此也稱為控制反轉。

 

     依賴注入主要有兩種方式,即構造器注入和setter注入。

 

1、構造器注入:

基於構造器的注入是通過調用帶參數的構造器來實現的,每個參數代表一個依賴。

 

執行個體:

先建立一個對象bean

public class HelloWorld<br />{<br /> private String msg;</p><p> //需要預設無參構造<br /> public HelloWorld(){};</p><p> public HelloWorld(String msg){<br /> this.msg = msg;<br /> }</p><p> public String getMsg(){<br /> return msg;<br /> }</p><p> public void setMsg(String msg){<br /> this.msg = msg;<br /> }<br />}

 

在修改設定檔applicationContext.xml,執行個體化bean

<bean id="hello" class="com.spring.demo.HelloWorld"><br /> <constructor-arg index="0"><br /> <value>HelloWorld!</value><br /> </constructor-arg><br /></bean>

 

最後測試是否能得到注入的bean,並列印出對象的屬性。

public static void main(String[] args){<br /> //讀取設定檔,獲得BeanFactory<br /> ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");</p><p> BeanFactory factory = context;</p><p> HelloWorld hello = (HelloWorld)factory.getBean("hello");</p><p> System.out.println(hello.getMsg());<br />}

 

2、Setter注入

通過調用無參構造器或者無參staticFactory 方法執行個體化bean之後,調用該bean的setter方法,即可實現基於setter的依賴注入

 

建立一個對象

public class HelloWorld<br />{<br /> private String msg;</p><p> public String getMsg(){<br /> return this.msg;<br /> }</p><p> public void setMsg(String msg){<br /> this.msg = msg;<br /> }<br />}

 

修改設定檔applicationContext.xml,執行個體化bean

<bean id="helloBean" class="com.spring.demo.HelloWorld"><br /> <property name="msg" value="Hello World !"/><br /></bean>

 

測試類別,擷取注入的bean

public static void main(String[] args){<br /> //讀取設定檔,執行個體化IOC容器<br /> ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");</p><p> BeanFactory factory = context;</p><p> HelloWorld hello = (HelloWorld)factory.getBean("helloBean");</p><p> System.out.println(hello.getMsg());<br />}<br />

 

 

總結:

處理bean依賴關係通常按照以下步驟進行。

 

1、根據定義bean的配置建立並初始化BeanFactory執行個體

 

2、每個bean的依賴將以屬性、構造器參數、或靜態Factory 方法參數的形式出現。當這些bean被實際建立時,這些依賴也將會提供給該bean。

 

3、每個屬性或構造器參數既可以是一個實際的值,也可以是對該容器中另一個bean的引用。

 

4、每個指定的屬性或者是構造器參數值必須能夠被轉換成特定的格式或構造參數所需的類型。

 

spring會在容器被建立時驗證容器中每個bean的配置,包括驗證那些bean所引用的屬性是否指向一個有效地bean。在bean被實際建立之前,bean的屬性並不會被設定。伴隨著bean被實際建立,作為該bean的依賴bean以及依賴bean的依賴bean也將被建立和分配。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.