1. 程式人生 > >Spring學習(2)--在xml中使用autowire自動裝配Bean屬性

Spring學習(2)--在xml中使用autowire自動裝配Bean屬性

spring的自動裝配:是指對於當前需要裝配的bean的屬性,不用使用手工方式顯示裝配,而是讓spring自己通過在IOC容器中按照一定的規則查詢相關的符合條件的bean,裝配為bean的屬性。

<bean>autowire屬性有六個值,說明如下:

1、 No:即不啟用自動裝配。Autowire預設的值。

2、 byName:通過屬性的名字的方式查詢JavaBean依賴的物件併為其注入。

3、 byType:通過屬性的型別查詢JavaBean依賴的物件併為其注入。

4、 constructor:通byType一樣,也是通過型別查詢依賴物件。與byType的區別在於它不是使用

Setter方法注入,而是使用構造器注入。

5、 autodetect:在byTypeconstructor之間自動的選擇注入方式。

6、 default:由上級標籤<beans>default-autowire屬性確定。

注意:在配置bean時,<bean>標籤中Autowire屬性的優先順序比其上級標籤高,即是說,如果在上級標籤中定義default-autowire屬性為byName,而在<bean>中定義為byType時,Spring IoC容器會優先使用<bean>標籤的配置。

這裡主要寫byName和byType兩種方式。

首先有三個類 :Person、Car、Address

Java檔案程式碼:

package com.study.autowire;

public class Person {
	private String name;
	private Address address;
	private Car car;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Address getAddress() {
		return address;
	}
	public void setAddress(Address address) {
		this.address = address;
	}
	public Car getCar() {
		return car;
	}
	public void setCar(Car car) {
		this.car = car;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", address=" + address + ", car=" + car
				+ "]";
	}
}

package com.study.autowire;

public class Car {
	private String brand;
	private double price;
	public String getBrand() {
		return brand;
	}
	public void setBrand(String brand) {
		this.brand = brand;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return "Car [brand=" + brand + ", price=" + price + "]";
	}
	
}

package com.study.autowire;

public class Address {
	private String city;
	private String street;
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
	public String getStreet() {
		return street;
	}
	public void setStreet(String street) {
		this.street = street;
	}
	@Override
	public String toString() {
		return "Address [city=" + city + ", street=" + street + "]";
	}
	
}

配置bean:car、address
<bean id="address" class="com.study.autowire.Address" p:city="hefei"
p:street="hezuohualu"></bean>

<bean id="car" class="com.study.autowire.Car" p:brand="bwm"
p:price="420000"></bean>

手動裝配:
<!--手動裝配  -->
<bean id="person" class="com.study.autowire.Person" 
p:name="zhangshiwei" p:address-ref="address" p:car-ref="car"></bean>

使用autowire屬性指定自動裝配的方式:
<!--使用autowire屬性指定自動裝配的方式    
byName根據bean的名字和當前bean中設定的setter風格的屬性名進行自動裝配,若有匹配的則自動裝配,若沒有匹配的,則不裝配。
-->
<bean id="person1" class="com.study.autowire.Person" 
p:name="zhangshiwei" autowire="byName"></bean>

<!--使用autowire屬性指定自動裝配的方式    
byType根據bean的型別和當前bean的屬性的型別進行自動裝配,若IOC容器中有一個以上型別匹配的bean,則拋異常。
-->
<bean id="person2" class="com.study.autowire.Person" 
p:name="zhangshiwei" autowire="byType"></bean>

自動裝配的缺點:

1.自動裝配將會裝配bean的所有屬性,若只希望裝配個別屬性時,使用autowire屬性就不夠靈活了。

2.自動裝配只能選擇一種方式進行裝配,如要麼選擇byName ,要麼選擇byType,不能兩者兼而有之。

相關推薦

Spring學習2--在xml使用autowire自動裝配Bean屬性

spring的自動裝配:是指對於當前需要裝配的bean的屬性,不用使用手工方式顯示裝配,而是讓spring自己通過在IOC容器中按照一定的規則查詢相關的符合條件的bean,裝配為bean的屬性。 <bean>的autowire屬性有六個值,說明如下: 1、 

Spring 學習——XML 配置裡的 Bean 自動裝配

XML 配置裡的 Bean 自動裝配 •Spring IOC 容器可以自動裝配 Bean. 需要做的僅僅是在 <bean> 的 autowire 屬性裡指定自動裝配的模式 •byType(根據型別自動裝配): 若 IOC 容器中有多個與目標 Bean 型別一致的 Bean. 在這

spring學習xml檔案的BeanDefinition讀取

上一節中說明了spring在讀取bean時主要的方法refresh中,首先要把配置和註解的bean檔案以beanDefintion的形式快取起來,這個方法是refreshBeanFactory() 各類呼叫的程式圖如下 @Override protected fin

spring基礎知識 15:使用註解自動裝配bean

一般情況下,控制層(controller)需要呼叫業務層(service)進行業務邏輯處理,業務層呼叫持久層(dao)訪問資料庫。這時候就需要使用自動裝配注入相應的bean.在controller中注入service,在service中注入reposito

Java學習2:將鍵盤錄入的內容保存到指定文件

stream exce 創建 txt 關閉 如果 下午 line 再次 要求:保存鍵盤錄入的內容,當鍵盤輸入end時,錄入結束。 1 /** 2 * 保存鍵盤輸入,並以end結束 3 * 4 * @author xcx 5 * @time 2017年6

Hibernate學習2- hibernate.cfg.xml詳解

source nec cfg 更新 閱讀 username 詳解 格式化sql BE 1:主配置文件主要分為三部分:    註意:通常情況下,一個session-factory節點代表一個數據庫;    1.1:第一部分       數據庫連接部分,註意"hibernate

Xml學習2

1、CDATA區: 非法字元 嚴格的講,在XML中僅有字元“<”和“&”是非法的。省略號、引號和大於號是合法的,但是把它們替換為實體引用是個好習慣。 <      &lt; &     

python學習筆記——2pandas的資料型別

    在用python進行資料處理的時候,自帶的五種資料型別使用起來顯然是有侷限性的,python之強大在於各種包,在資料處理中用的最多的就是pandas和numpy。本文章主要介紹pandas的資料結構。     pandas有兩種資料結構  

spring學習使用註解代替xml配置

用的是IDEA的maven工程,pom.xml檔案導包依賴省略 一、書寫要匯入容器的實體類 import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation

Spring 學習——IOC 容器 Bean 的生命週期

IOC 容器中 Bean 的生命週期方法 •Spring IOC 容器可以管理 Bean 的生命週期, Spring 允許在 Bean 生命週期的特定點執行定製的任務. •Spring IOC 容器對 Bean 的生命週期進行管理的過程: –通過構造器或工廠方法建立 Bean 例項

Spring 學習——Spring Bean 配置

配置形式:基於 XML 檔案的方式;基於註解的方式 Bean 的配置方式:通過全類名(反射)、通過工廠方法(靜態工廠方法 & 例項工廠方法)、FactoryBean IOC 容器 BeanFactory & ApplicationContext 概述 依賴注入

Spring基礎2——Spring裝入bean的幾種方法

上一篇文章描述了spring裝配bean的自動化裝配技術 下面主要描述一下spring裝配bean的顯示配置,其中顯示配置有兩種方案,Java配置和XML。 為啥需要有顯示配置的?其實主要是考慮到第三方外掛,我們無法通過標註@Component和@Autowir

javaWeb學習2——web.xml和pom.xml都是幹嘛用的

web.xml和pom.xml看起來差不多都是仨字母,檔案字尾都一樣 對於初學者來講,剛接觸這裡面的東西,感覺亂七八糟的傻傻弄不清楚 我也以一個初學者的角度,說說自己的理解 一、POM啥意思呢,百度了一下叫專案物件模型------->該檔案用於管理:原始碼、配置檔案、

深度學習2--深度學習的這25個概念

神經網路基礎1)神經元(Neuron)——就像形成我們大腦基本元素的神經元一樣,神經元形成神經網路的基本結構。想象一下,當我們得到新資訊時我們該怎麼做。當我們獲取資訊時,我們一般會處理它,然後生成一個輸出。類似地,在神經網路的情況下,神經元接收輸入,處理它併產生輸出,而這個輸

tensorflow學習2:tensorflow基本概念的理解

前言: tensorflow中有很多基本概念要理解,最好的方法是去官網跟著教程一步一步看,這裡還有一些翻譯的版本,對照著看有助於理解:tensorflow1.0 文件翻譯 正文: 一,構建並執行計算圖的必要過程 1,graph(圖計算):詳見tf.G

spring cloud 學習2核心: Eureka: 提供服務註冊和發現 註冊中心,負載均衡,故障轉移

官方描述:雲端服務發現,一個基於 REST 的服務,用於定位服務,以實現雲端中間層服務發現和故障轉移 Eureka 一個服務中心,一個註冊中心,將可以提供的服務都註冊到這個元件中, ,其他呼叫者需要的時候去註冊中心去獲取,然後再呼叫,避免了服務間的直接呼叫,實現了服務間的解耦

java反射學習筆記2----java的靜態載入類和動態載入類

首先我們要了解java中的編譯和執行的兩個概念,我們在初學java的時候都學過,我們會先寫一個Test.java檔案,然後javac Test.java,最後在java Test 。這其中的java

Spring學習1--使用xml配置Bean屬性

使用xml配置Bean屬性之前需要先定義對應的XML和對應xsd檔案: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/

機器學習總結2—分類的代數模型

前言   過去幾個月,一直在學習機器學習模型,輸入只是學習的一部分,輸出可以幫助自己更熟練地掌握概念和知識。把一個複雜的事物簡單的講述出來,才能夠證明真正弄懂了這個知識。所以我將在部落格中儘量簡單地把這些模型講述出來,以加深自己的掌握,也為他人提供一點點參考。在此感謝大神劉建平Pinard的部落格,如有任何疑

javascript學習2循環

src .cn tin asc for循環 循環 分享 ava bre 一、for循環 1、for(i=1;i<6;i++)循環 2、for(x in arrayA)循環 二、while循環 1、while循環 2、do。。while循環 三、continue