Bean的自動裝配----ByName
ByName模式:
根據屬性名自動裝配。此選項將檢查容器並根據名字查找與屬性完全一致的bean,並將其與屬性自動裝配。例如,在bean定義中將autowire設置爲by name,而該bean包含master屬性(同時提供setMaster(..)方法),Spring就會查找名爲master的bean定義,並用它來裝配給master屬性。
案例:
EmpServiceImpl.java
public class EmpServiceImpl {
private AddressServiceImpl addressServiceImpl;
public AddressServiceImpl getAddressServiceImpl() {
return addressServiceImpl;
}
public void setAddressServiceImpl(AddressServiceImpl addressServiceImpl) {
this.addressServiceImpl = addressServiceImpl;
}
public void address(){
System.out.println("address方法由測試類中調用:"+addressServiceImpl.getAddress() );
}
}
AddressServiceImpl.java
public class AddressServiceImpl {
private String address;
public void setAddress(String address) {
this.address = address;
}
public String getAddress() {
System.out.println("顯示xml中賦的address的值是" + address);
return address;
}
}
Xml中的bean
<bean id="empServiceImpl" class="cn.csdn.service.EmpServiceImpl"
scope="singleton" autowire="byName" />
//一下bean的id的值需要同EmpServiceImpl類中封裝的AddressServiceImpl類的對象的名稱一樣。ByName就是根據此名稱進行查找的
<bean id="addressServiceImpl" class="cn.csdn.service.AddressServiceImpl"
scope="singleton">
<property name="address">
<value>北京中關村</value>
</property>
</bean>
byname
byType
在使用的過程中必須保證bean能夠初始化即含有一個默認的構造器,否則的話會出現bug
如果有默認的無參數的構造器就不需要多餘的配置
如果有帶有參數的構造器,那在bean的配置中必須配置器初始化的參數 或者在bean中添加無參數的構造器
補充內容:依賴檢查
Spring除了能對容器中bean的依賴設置進行檢查外。還可以檢查bean定義中實際屬性值的設置,當然也包括採用自動裝配方式設置屬性值的檢查。
模式 |
說明 |
none |
沒有依賴檢查,如果bean的屬性沒有值的話可以不用設置。 |
simple |
對於原始類型及集合(除協作者外的一切東西)執行依賴檢查 |
object |
僅對協作者執行依賴檢查 |
all |
對協作者,原始類型及集合執行依賴檢查 |
dependency-check="objects":依賴對象檢查 ,如果對象不存在(即找不到bean時)就會出現bug
dependency-check:
none:沒有依賴檢查
simple(除了協作者)原始數據、集合執行依賴檢查
objects僅對協作者的依賴檢查
all 所有
自動裝配就是針對bean的,匹配過程中可以依賴檢查,檢查的值爲objects指的是僅對協作者執行依賴檢查