2011年9月19日 星期一

Spring 教學 - Bean 的自動裝配

關於自動裝配在 Spring 中提供了一個規則來對 Bean 進行自動裝配

進而無須透過在 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 標籤了







沒有留言:

張貼留言