欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Spring@Autowired注解與自動裝配詳談

 更新時間:2017年10月10日 09:44:35   作者:和大黃  
下面小編就為大家?guī)硪黄赟pring@Autowired注解與自動裝配詳談。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

1 配置文件的方法

我們編寫spring 框架的代碼時候。一直遵循是這樣一個規(guī)則:所有在spring中注入的bean 都建議定義成私有的域變量。并且要配套寫上 get 和 set方法。

Boss 擁有 Office 和 Car 類型的兩個屬性:

清單 3. Boss.java

package com.baobaotao;  
 
public class Boss {  
 private Car car;  
 private Office office;  
 
 // 省略 get/setter  
 
 @Override 
 public String toString() {  
  return "car:" + car + "/n" + "office:" + office;  
 }  
}

System.out.println必須實現(xiàn)toString方法

我們在 Spring 容器中將 Office 和 Car 聲明為 Bean,并注入到 Boss Bean 中:下面是使用傳統(tǒng) XML 完成這個工作的配置文件 beans.xml:

清單 4. beans.xml 將以上三個類配置成 Bean

<?xml version="1.0" encoding="UTF-8" ?>  
<beans xmlns="http://www.springframework.org/schema/beans" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://www.springframework.org/schema/beans  
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
 <bean id="boss" class="com.baobaotao.Boss">  
  <property name="car" ref="car"/>  
  <property name="office" ref="office" />  
 </bean>  
 <bean id="office" class="com.baobaotao.Office">  
  <property name="officeNo" value="002"/>  
 </bean>  
 <bean id="car" class="com.baobaotao.Car" scope="singleton">  
  <property name="brand" value=" 紅旗 CA72"/>  
  <property name="price" value="2000"/>  
 </bean>  
</beans>

當我們運行以下代碼時,控制臺將正確打出 boss 的信息:

清單 5. 測試類:AnnoIoCTest.java

import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
public class AnnoIoCTest {  
 
 public static void main(String[] args) {  
  String[] locations = {"beans.xml"};  
  ApplicationContext ctx =  
   new ClassPathXmlApplicationContext(locations);  
  Boss boss = (Boss) ctx.getBean("boss");  
  System.out.println(boss);  
 }  
}

這說明 Spring 容器已經(jīng)正確完成了 Bean 創(chuàng)建和裝配的工作。

2 @Autowired

Spring 2.5 引入了 @Autowired 注釋,它可以對類成員變量、方法及構(gòu)造函數(shù)進行標注,完成自動裝配的工作。 通過 @Autowired的使用來消除 set ,get方法。

要實現(xiàn)我們要精簡程序的目的。需要這樣來處理:

* 在applicationContext.xml中加入:

<!-- 該 BeanPostProcessor 將自動對標注 @Autowired 的 Bean 進行注入 -->  
 <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

Spring 通過一個 BeanPostProcessor 對 @Autowired 進行解析,所以要讓 @Autowired 起作用必須事先在 Spring 容器中聲明 AutowiredAnnotationBeanPostProcessor Bean。

* 修改在原來注入spirng容器中的bean的方法。

在域變量上加上標簽@Autowired,并且去掉 相應(yīng)的get 和set方法

清單 6. 使用 @Autowired 注釋的 Boss.java

package com.baobaotao;  
import org.springframework.beans.factory.annotation.Autowired;  
 
public class Boss {  
 
 @Autowired 
 private Car car;  
 
 @Autowired 
 private Office office;  
 
 …  
}

* 在applicatonContext.xml中 把原來 引用的<porpery >標簽也去掉。

<?xml version="1.0" encoding="UTF-8" ?>  
<beans xmlns="http://www.springframework.org/schema/beans" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://www.springframework.org/schema/beans  
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
 
 <!-- 該 BeanPostProcessor 將自動起作用,對標注 @Autowired 的 Bean 進行自動注入 -->  
 <bean class="org.springframework.beans.factory.annotation.  
  AutowiredAnnotationBeanPostProcessor"/>  
 
 <!-- 移除 boss Bean 的屬性注入配置的信息 -->  
 <bean id="boss" class="com.baobaotao.Boss"/>  
  
 <bean id="office" class="com.baobaotao.Office">  
  <property name="officeNo" value="001"/>  
 </bean>  
 <bean id="car" class="com.baobaotao.Car" scope="singleton">  
  <property name="brand" value=" 紅旗 CA72"/>  
  <property name="price" value="2000"/>  
 </bean>  
</beans>

這樣,當 Spring 容器啟動時,AutowiredAnnotationBeanPostProcessor 將掃描 Spring 容器中所有 Bean,當發(fā)現(xiàn) Bean 中擁有 @Autowired 注釋時就找到和其匹配(默認按類型匹配)的 Bean,并注入到對應(yīng)的地方中去。

按照上面的配置,Spring 將直接采用 Java 反射機制對 Boss 中的 car 和 office 這兩個私有成員變量進行自動注入。所以對成員變量使用 @Autowired 后,您大可將它們的 setter 方法(setCar() 和 setOffice())從 Boss 中刪除。

當然,您也可以通過 @Autowired 對方法或構(gòu)造函數(shù)進行標注,如果構(gòu)造函數(shù)有兩個入?yún)?,分別是 bean1 和 bean2,@Autowired 將分別尋找和它們類型匹配的 Bean,將它們作為 CountryService (Bean1 bean1 ,Bean2 bean2) 的入?yún)韯?chuàng)建 CountryService Bean。來看下面的代碼: 對方法

package com.baobaotao;  
 
public class Boss {  
 private Car car;  
 private Office office;  
 
  @Autowired 
 public void setCar(Car car) {  
  this.car = car;  
 }  
  
 @Autowired 
 public void setOffice(Office office) {  
  this.office = office;  
 }  
 …  
}

這時,@Autowired 將查找被標注的方法的入?yún)㈩愋偷?Bean,并調(diào)用方法自動注入這些 Bean。而下面的使用方法則對構(gòu)造函數(shù)進行標注:

package com.baobaotao;  
 
public class Boss {  
 private Car car;  
 private Office office;  
 
  @Autowired 
 public void setCar(Car car) {  
  this.car = car;  
 }  
  
 @Autowired 
 public void setOffice(Office office) {  
  this.office = office;  
 }  
 …

由于 Boss() 構(gòu)造函數(shù)有兩個入?yún)?,分別是 car 和 office,@Autowired 將分別尋找和它們類型匹配的 Bean,將它們作為 Boss(Car car ,Office office) 的入?yún)韯?chuàng)建 Boss Bean。

以上這篇基于Spring@Autowired注解與自動裝配詳談就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • JAVA實現(xiàn)簡單搶紅包算法(模擬真實搶紅包)

    JAVA實現(xiàn)簡單搶紅包算法(模擬真實搶紅包)

    這篇文章主要介紹了JAVA實現(xiàn)簡單搶紅包算法(模擬真實搶紅包)的實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-12-12
  • 幾道java循環(huán)練習題(適合新人)

    幾道java循環(huán)練習題(適合新人)

    這篇文章主要給大家介紹了幾道java循環(huán)練習題,非常適合剛?cè)腴T的java新人,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • JAVA利用泛型返回類型不同的對象方法

    JAVA利用泛型返回類型不同的對象方法

    下面小編就為大家?guī)硪黄狫AVA利用泛型返回類型不同的對象方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 淺析Java中對稱與非對稱加密算法原理與使用

    淺析Java中對稱與非對稱加密算法原理與使用

    密碼學是研究編制密碼和破譯密碼的技術(shù)科學。這篇文章主要為大家介紹了Java中對稱與非對稱加密算法的原理與使用,感興趣的小伙伴可以了解一下
    2023-03-03
  • 淺談java中的聲明常量為什么要用static修飾

    淺談java中的聲明常量為什么要用static修飾

    這篇文章主要介紹了淺談java中的聲明常量為什么要用static修飾的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java設(shè)計模式中的抽象工廠模式解讀

    Java設(shè)計模式中的抽象工廠模式解讀

    這篇文章主要介紹了Java設(shè)計模式中的抽象工廠模式解讀,抽象工廠模式為創(chuàng)建一組相關(guān)或相互依賴的對象提供一個接口,而且無需指定他們的具體類,需要的朋友可以參考下
    2023-11-11
  • SpringMVC使用MultipartFile實現(xiàn)文件上傳

    SpringMVC使用MultipartFile實現(xiàn)文件上傳

    這篇文章主要為大家詳細介紹了SpringMVC使用MultipartFile實現(xiàn)文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • SpringBoot中的異步任務(wù)解析

    SpringBoot中的異步任務(wù)解析

    這篇文章主要介紹了SpringBoot中的異步任務(wù)解析,SpringBoot 異步任務(wù)是一種在SpringBoot框架中使用的異步處理機制,可以提高系統(tǒng)的并發(fā)能力和響應(yīng)速度,需要的朋友可以參考下
    2023-10-10
  • Java的List集合中泛型使用詳解

    Java的List集合中泛型使用詳解

    這篇文章主要介紹了Java的List集合中泛型使用詳解,泛型類,如果沒有指定具體的數(shù)據(jù)類型,此時,操作類型是Object,泛型的類型參數(shù)只能是類類型,不能是基本數(shù)據(jù)類型,需要的朋友可以參考下
    2023-12-12
  • java實現(xiàn)通訊錄管理系統(tǒng)

    java實現(xiàn)通訊錄管理系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現(xiàn)通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07

最新評論