public class AutoWiringDao { private String daoName; public void setDaoName(String daoName) { this.daoName = daoName; } public String getDaoName() { return daoName; } public void say(String word) { System.out.println(daoName + "===AutoWiringDao===" + word); } }
public class AutoWiringService { private AutoWiringDao autoWiringDao1; private AutoWiringService() { System.out.println("無參構造方法"); } private AutoWiringService(AutoWiringDao autoWiringDao3) { autoWiringDao1 = autoWiringDao3; System.out.println("有參構造方法===" + autoWiringDao1.getDaoName()); } public void setAutoWiringDao1(AutoWiringDao autoWiringDao) { autoWiringDao1 = autoWiringDao; } public void say(String word) { autoWiringDao1.say(word); } }
以上是所需要的類AutoWiringService與類AutoWiringDao。
1、byName
spring-autowiring.xml檔案
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd" default-autowire="byName" > <bean id="autoWiringDao" class="com.wangzhu.spring.autowiring.AutoWiringDao"> <property name="daoName" value="autoWiringDao"/> </bean> <bean id="autoWiringDao1" class="com.wangzhu.spring.autowiring.AutoWiringDao"> <property name="daoName" value="autoWiringDao1"/> </bean> <bean id="autoWiringDao2" class="com.wangzhu.spring.autowiring.AutoWiringDao"> <property name="daoName" value="autoWiringDao2"/> </bean> <bean class="com.wangzhu.spring.autowiring.AutoWiringDao"> <property name="daoName" value="null"/> </bean> <bean id="autoWiringService" class="com.wangzhu.spring.autowiring.AutoWiringService"></bean> </beans>
測試:
AutoWiringService service = getBean("autoWiringService");
service.say("this is a test autowire!");
輸出:
無參構造方法 autoWiringDao1===AutoWiringDao===this is a test autowire!
備註:通過byName方法進行自動裝配,
1)、需要無參構造方法;
2)、需要有同名的成員變數,以及該變數的set方法。
2、byType
只需要更改spring-autowiring.xml檔案
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd" default-autowire="byType" > <bean class="com.wangzhu.spring.autowiring.AutoWiringDao"> <property name="daoName" value="null"/> </bean> <bean id="autoWiringService" class="com.wangzhu.spring.autowiring.AutoWiringService"></bean> </beans>
輸出:
無參構造方法
null===AutoWiringDao===this is a test autowire!
備註:通過byType方法進行自動裝配,
1)、需要無參構成方法;
2)、同型別的Bean只能存在一個,否則將丟擲異常;
3)、需要該成員變數的set方法,其變數名隨意,故在spring-autowiring.xml中只需指定該Bean的class即可。
3、constructor
只需要更改spring-autowiring.xml檔案
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd" default-autowire="constructor" > <bean class="com.wangzhu.spring.autowiring.AutoWiringDao"> <property name="daoName" value="null"/> </bean> <bean id="autoWiringService" class="com.wangzhu.spring.autowiring.AutoWiringService"></bean> </beans>
輸出:
有參構造方法===null
null===AutoWiringDao===this is a test autowire!
備註:通過constructor方法進行自動裝配,
1)、需要對應的有參構造方法,若無則丟擲異常,當然若有無參構造方法,則不會丟擲異常;
2)、當只有一個同型別的成員變數的Bean時,直接指定該Bean的class即可;
3)、同有多個同型別的成員變數的Bean時,其會根據該Bean的名稱與構造方法中的形參名進行比較,若不一樣,則直接呼叫無參構造方法。