進而無須透過在 XML 顯式的方法進行設定,而 Spring IoC 容器會自動協調這個 Bean
之間的關連關係 一般而言有分為四種自動裝配的做法
1. byName
根據這個 Bean 的 id 值去對照物件的屬性名稱是否相同
通常較常用的是這個
2. byType
如果容器中存在一個與指定屬性型態相同的 Bean 如果相同就會自動裝配
如果有多個相同型態的 Bean 將會丟出例外
3. constructor
有點類似 byType,只是他是透過建構子的參數帶入而已
4. autodetect
透過自省機制決定是要用 byType 還是 constructor,如果 Bean 的對應類別
的建構子為預設建構子,那麼將會採用 byType
簡言之,自動裝配會讓你減少屬性或是建構子參數的設定而已
在 XML 中如果要讓某個 Bean 採用自動裝配,須在 bean 標籤中加入
autowire 的屬性並指定要哪種機制
以下來簡單示範一下 byName 的做法
一個 Admin 類別
public class Admin
{
private int age;
private String name;
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
一個 System 會有一個 Admin 屬性
public class System
{
private String sysName;
private String sysPort;
private Admin admin;
public String getSysName() {
return sysName;
}
public void setSysName(String sysName) {
this.sysName = sysName;
}
public String getSysPort() {
return sysPort;
}
public void setSysPort(String sysPort) {
this.sysPort = sysPort;
}
public Admin getAdmin() {
return admin;
}
public void setAdmin(Admin admin) {
this.admin = admin;
}
}
接下來就看看 Spring 的自動裝配如何將 Admin 自動注入給 System
<bean id="admin"
class="org.Admin">
<property name="age" value="30">
<property name="name" value="Allen">
</bean>
<bean id="system" class="org.System"
autowire="byName">
<property name="sysName" value="sys_1">
<property name="sysPort" value="1234">
</bean>
這裡在 System 的 Bean 上設定 autowire 屬性 並指明以 byName 的方式來自動裝配
此時就不需要再多加一個 property 標籤了
沒有留言:
張貼留言