進而無須透過在 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 標籤了
沒有留言:
張貼留言