系列博文
JavaWeb_(Spring框架)xml配置文件 傳送門
JavaWeb_(Spring框架)注解配置 傳送門
Xml配置
a)Bean元素:交由Spring管理的對象都要配置在bean標簽中;
i.Bean標簽介紹和創建方式:空參構造、靜態工廠、動態工廠;
ii.Scope屬性介紹:singleton、protoptype、request、session;
iii.初始化方法Init-method和 銷毀方法destroy-method介紹;
b)屬性注入:
i.Set方法注入;
ii.構造函數注入;
iii.復雜類型注入:Array、List、Set、Map、Properties
1、xml配置-bean標簽-配置及創建方式
ApplicationContext 配置的所有bean都會在容器創建的時候被創建出來,
如果配置的bean較多,那么在創建容的時候,會產生內存過大的問題;這種情況在機器硬件性能較為落后的時候體現的比較明顯;
延遲加載(懶加載) true就是創建容器時不加載配置的bean對象,在獲取的時候才創建;
<!-- name 是起一個名字,我們可以通過這個name來利用容器獲取對象 name 可以使用特殊字符 name 可以重復 我們在實際開發中不推薦將多個對象名字命名為重復的--> <!-- id與name作用基本相同,單不推薦使用 不支持特殊字符,不能重復 --> <!-- class:是被管理對象的全包名,spring會通過這個包名來創建對象 --> <bean name="user" class="com.Gary.bean.User" lazy-init ="true"> <!-- 為u_id注入了一個id為2的值 --> <property name="u_id" value="2"></property> </bean>

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> <!-- name 是起一個名字,我們可以通過這個name來利用容器獲取對象 name 可以使用特殊字符 name 可以重復 我們在實際開發中不推薦將多個對象名字命名為重復的--> <!-- id與name作用基本相同,單不推薦使用 不支持特殊字符,不能重復 --> <!-- class:是被管理對象的全包名,spring會通過這個包名來創建對象 --> <!-- request 在web環境下,如果scope屬性為request 那么這個對象被創建出來 他的生命周期會與request請求一致--> <!-- session 同理 ,生命周期與session一致 --> <bean name="user" class="com.Gary.bean.User" lazy-init ="true"> <!-- 為u_id注入了一個id為2的值 --> <property name="u_id" value="2"></property> </bean> </beans>
2、xml配置-bean標簽-scope屬性
scope="singleton" 表示<bean>是單例的
<bean name="user" class="com.Gary.bean.User" lazy-init ="true" scope="singleton"> <!-- 為u_id注入了一個id為2的值 --> <property name="u_id" value="2"></property> </bean>

package com.Gary.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.Gary.bean.User; public class HelloSpring2 { //Spring是一個容器,它將幫助我們管理對象 @Test public void Test2() { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); //scope="singleton" 默認值 單例的 只允許創建出一份 User u1 = (User) ac.getBean("user"); User u2 = (User) ac.getBean("user"); User u3 = (User) ac.getBean("user"); System.out.println(u1==u2); } }

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> <!-- name 是起一個名字,我們可以通過這個name來利用容器獲取對象 name 可以使用特殊字符 name 可以重復 我們在實際開發中不推薦將多個對象名字命名為重復的--> <!-- id與name作用基本相同,單不推薦使用 不支持特殊字符,不能重復 --> <!-- class:是被管理對象的全包名,spring會通過這個包名來創建對象 --> <!-- request 在web環境下,如果scope屬性為request 那么這個對象被創建出來 他的生命周期會與request請求一致--> <!-- session 同理 ,生命周期與session一致 --> <bean name="user" class="com.Gary.bean.User" lazy-init ="true" scope="singleton"> <!-- 為u_id注入了一個id為2的值 --> <property name="u_id" value="2"></property> </bean> </beans>
scope="prototype" 表示<bean>是多例的
<bean name="user" class="com.Gary.bean.User" lazy-init ="true" scope="prototype"> <!-- 為u_id注入了一個id為2的值 --> <property name="u_id" value="2"></property> </bean>

package com.Gary.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.Gary.bean.User; public class HelloSpring2 { //Spring是一個容器,它將幫助我們管理對象 @Test public void Test2() { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); //scope="prototype" 多例的 允許創建出多份對象 User u1 = (User) ac.getBean("user"); User u2 = (User) ac.getBean("user"); User u3 = (User) ac.getBean("user"); System.out.println(u1==u2); } }

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> <!-- name 是起一個名字,我們可以通過這個name來利用容器獲取對象 name 可以使用特殊字符 name 可以重復 我們在實際開發中不推薦將多個對象名字命名為重復的--> <!-- id與name作用基本相同,單不推薦使用 不支持特殊字符,不能重復 --> <!-- class:是被管理對象的全包名,spring會通過這個包名來創建對象 --> <!-- request 在web環境下,如果scope屬性為request 那么這個對象被創建出來 他的生命周期會與request請求一致--> <!-- session 同理 ,生命周期與session一致 --> <bean name="user" class="com.Gary.bean.User" lazy-init ="true" scope="prototype"> <!-- 為u_id注入了一個id為2的值 --> <property name="u_id" value="2"></property> </bean> </beans>
scrope的其它兩個屬性request、session(基本用不到這兩個屬性)
一般情況下使用singleton單例的,特殊情況下使用prototype多例的(使用struts時,它創建的action是多例的)
<!-- request 在web環境下,如果scope屬性為request 那么這個對象被創建出來 他的生命周期會與request請求一致--> <!-- session 同理 ,生命周期與session一致 --> <bean name="user" class="com.Gary.bean.User" lazy-init ="true" scope="prototype"> <!-- 為u_id注入了一個id為2的值 --> <property name="u_id" value="2"></property> </bean>
3、xml配置-bean標簽-init-method與destroy-method的使用
在User.java中添加一個userInit()初始化方法與userDestroy()銷毀容器時的方法
public void userInit() { System.out.println("user init"); } public void userDestroy() { System.out.println("user destroy"); }
<bean name="user" class="com.Gary.bean.User" lazy-init ="true" init-method="userInit" destroy-method="userDestroy"> <!-- 為u_id注入了一個id為2的值 --> <property name="u_id" value="2"></property> </bean>

package com.Gary.bean; public class User { private Integer u_id; private String u_username; private String u_password; /*public User() { System.out.println("默認使用 User 對象空參構造方法"); }*/ public Integer getU_id() { return u_id; } public void setU_id(Integer u_id) { this.u_id = u_id; } public String getU_username() { return u_username; } public void setU_username(String u_username) { this.u_username = u_username; } public String getU_password() { return u_password; } public void setU_password(String u_password) { this.u_password = u_password; } @Override public String toString() { return "User [u_id=" + u_id + ", u_username=" + u_username + ", u_password=" + u_password + "]"; } public void userInit() { System.out.println("user init"); } public void userDestroy() { System.out.println("user destroy"); } }

package com.Gary.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.Gary.bean.User; public class HelloSpring2 { //Spring是一個容器,它將幫助我們管理對象 @Test public void Test2() { ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); //scope="prototype" 多例的 允許創建出多份對象 User u1 = (User) ac.getBean("user"); User u2 = (User) ac.getBean("user"); User u3 = (User) ac.getBean("user"); System.out.println(u1==u2); //關閉容器激活destroy-method方法 ac.close(); } }

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> <!-- name 是起一個名字,我們可以通過這個name來利用容器獲取對象 name 可以使用特殊字符 name 可以重復 我們在實際開發中不推薦將多個對象名字命名為重復的--> <!-- id與name作用基本相同,單不推薦使用 不支持特殊字符,不能重復 --> <!-- class:是被管理對象的全包名,spring會通過這個包名來創建對象 --> <!-- request 在web環境下,如果scope屬性為request 那么這個對象被創建出來 他的生命周期會與request請求一致--> <!-- session 同理 ,生命周期與session一致 --> <bean name="user" class="com.Gary.bean.User" lazy-init ="true" init-method="userInit" destroy-method="userDestroy"> <!-- 為u_id注入了一個id為2的值 --> <property name="u_id" value="2"></property> </bean> </beans>
4、xml配置-屬性注入-Set方式注入
注入一個基本類型
創建一個applicationContext_Injection.xml和Test_Injection.java
<!-- 將user對象交給Spring管理,並注入類型 --> <bean name="user" class="com.Gary.bean.User"> <property name="u_id" value="1"/> <property name="u_username" value="Gary"/> <property name="u_password" value="123"/> </bean>

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> <!-- 將user對象交給Spring管理,並注入類型 --> <bean name="user" class="com.Gary.bean.User"> <property name="u_id" value="1"/> <property name="u_username" value="Gary"/> <property name="u_password" value="123"/> </bean> </beans>

package com.Gary.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.Gary.bean.User; public class Test_Injection { //Spring是一個容器,它將幫助我們管理對象 @Test public void Test2() { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext_Injection.xml"); User u1 = (User) ac.getBean("user"); System.out.println(u1); } }

package com.Gary.bean; public class User { private Integer u_id; private String u_username; private String u_password; /*public User() { System.out.println("默認使用 User 對象空參構造方法"); }*/ public Integer getU_id() { return u_id; } public void setU_id(Integer u_id) { this.u_id = u_id; } public String getU_username() { return u_username; } public void setU_username(String u_username) { this.u_username = u_username; } public String getU_password() { return u_password; } public void setU_password(String u_password) { this.u_password = u_password; } @Override public String toString() { return "User [u_id=" + u_id + ", u_username=" + u_username + ", u_password=" + u_password + "]"; } public void userInit() { System.out.println("user init"); } public void userDestroy() { System.out.println("user destroy"); } }
注入引用類型
創建一個Pet.java寵物類

package com.Gary.bean; public class Pet { //寵物類型 貓 狗 private String petType; //寵物顏色 private String color; @Override public String toString() { return "Pet [petType=" + petType + ", color=" + color + "]"; } public String getPetType() { return petType; } public void setPetType(String petType) { this.petType = petType; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } }
在User.java中加入寵物字段
private Integer u_id; private String u_username; private String u_password; //加入寵物字段 private Pet u_pet;

package com.Gary.bean; public class User { private Integer u_id; private String u_username; private String u_password; //加入寵物字段 private Pet u_pet; @Override public String toString() { return "User [u_id=" + u_id + ", u_username=" + u_username + ", u_password=" + u_password + ", u_pet=" + u_pet + "]"; } public Pet getU_pet() { return u_pet; } public void setU_pet(Pet u_pet) { this.u_pet = u_pet; } /*public User() { System.out.println("默認使用 User 對象空參構造方法"); }*/ public Integer getU_id() { return u_id; } public void setU_id(Integer u_id) { this.u_id = u_id; } public String getU_username() { return u_username; } public void setU_username(String u_username) { this.u_username = u_username; } public String getU_password() { return u_password; } public void setU_password(String u_password) { this.u_password = u_password; } public void userInit() { System.out.println("user init"); } public void userDestroy() { System.out.println("user destroy"); } }
<!-- 將user對象交給Spring管理,並注入類型 --> <bean name="user" class="com.Gary.bean.User"> <property name="u_id" value="1"/> <property name="u_username" value="Gary"/> <property name="u_password" value="123"/> <!-- 引用類型的注入 --> <property name="u_pet" ref="dog"/> </bean> <!-- 注入引用類型 --> <bean name="dog" class="com.Gary.bean.Pet"> <property name="petType" value="二哈"/> <property name="color" value="灰白"/> </bean>

package com.Gary.bean; public class User { private Integer u_id; private String u_username; private String u_password; //加入寵物字段 private Pet u_pet; @Override public String toString() { return "User [u_id=" + u_id + ", u_username=" + u_username + ", u_password=" + u_password + ", u_pet=" + u_pet + "]"; } public Pet getU_pet() { return u_pet; } public void setU_pet(Pet u_pet) { this.u_pet = u_pet; } /*public User() { System.out.println("默認使用 User 對象空參構造方法"); }*/ public Integer getU_id() { return u_id; } public void setU_id(Integer u_id) { this.u_id = u_id; } public String getU_username() { return u_username; } public void setU_username(String u_username) { this.u_username = u_username; } public String getU_password() { return u_password; } public void setU_password(String u_password) { this.u_password = u_password; } public void userInit() { System.out.println("user init"); } public void userDestroy() { System.out.println("user destroy"); } }

package com.Gary.bean; public class Pet { //寵物類型 貓 狗 private String petType; //寵物顏色 private String color; @Override public String toString() { return "Pet [petType=" + petType + ", color=" + color + "]"; } public String getPetType() { return petType; } public void setPetType(String petType) { this.petType = petType; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } }

package com.Gary.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.Gary.bean.User; public class Test_Injection { //Spring是一個容器,它將幫助我們管理對象 @Test public void Test2() { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext_Injection.xml"); User u1 = (User) ac.getBean("user"); System.out.println(u1); } }

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> <!-- 將user對象交給Spring管理,並注入類型 --> <bean name="user" class="com.Gary.bean.User"> <property name="u_id" value="1"/> <property name="u_username" value="Gary"/> <property name="u_password" value="123"/> <!-- 引用類型的注入 --> <property name="u_pet" ref="dog"/> </bean> <!-- 注入引用類型 --> <bean name="dog" class="com.Gary.bean.Pet"> <property name="petType" value="二哈"/> <property name="color" value="灰白"/> </bean> </beans>
5、xml配置-屬性注入-構造函數注入
在User.java中創建構造函數(一定要帶空參構造方法)
public User(String u_username, Pet u_pet) { System.out.println("方法1 String,Pet"); this.u_username = u_username; this.u_pet = u_pet; }

package com.Gary.bean; public class User { private Integer u_id; private String u_username; private String u_password; public User(String u_username, Pet u_pet) { System.out.println("方法1 String,Pet"); this.u_username = u_username; this.u_pet = u_pet; } //加入寵物字段 private Pet u_pet; @Override public String toString() { return "User [u_id=" + u_id + ", u_username=" + u_username + ", u_password=" + u_password + ", u_pet=" + u_pet + "]"; } public Pet getU_pet() { return u_pet; } public void setU_pet(Pet u_pet) { this.u_pet = u_pet; } /*public User() { System.out.println("默認使用 User 對象空參構造方法"); }*/ public Integer getU_id() { return u_id; } public void setU_id(Integer u_id) { this.u_id = u_id; } public String getU_username() { return u_username; } public void setU_username(String u_username) { this.u_username = u_username; } public String getU_password() { return u_password; } public void setU_password(String u_password) { this.u_password = u_password; } public void userInit() { System.out.println("user init"); } public void userDestroy() { System.out.println("user destroy"); } }
在applicationContext_Injection.xml中使用構造方法注入配置<bean>元素
<!-- 構造方法注入 --> <bean name="user1" class="com.Gary.bean.User"> <constructor-arg name="u_username" value="Gary2"/> <constructor-arg name="u_pet" ref="dog"/> </bean>

package com.Gary.bean; public class User { private Integer u_id; private String u_username; private String u_password; public User(String u_username, Pet u_pet) { System.out.println("方法1 String,Pet"); this.u_username = u_username; this.u_pet = u_pet; } //加入寵物字段 private Pet u_pet; @Override public String toString() { return "User [u_id=" + u_id + ", u_username=" + u_username + ", u_password=" + u_password + ", u_pet=" + u_pet + "]"; } public Pet getU_pet() { return u_pet; } public void setU_pet(Pet u_pet) { this.u_pet = u_pet; } public User() { System.out.println("默認使用 User 對象空參構造方法"); } public Integer getU_id() { return u_id; } public void setU_id(Integer u_id) { this.u_id = u_id; } public String getU_username() { return u_username; } public void setU_username(String u_username) { this.u_username = u_username; } public String getU_password() { return u_password; } public void setU_password(String u_password) { this.u_password = u_password; } }

package com.Gary.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.Gary.bean.User; public class Test_Injection { //Spring是一個容器,它將幫助我們管理對象 @Test public void Test2() { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext_Injection.xml"); User u1 = (User) ac.getBean("user1"); System.out.println(u1); } }

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> <!-- 將user對象交給Spring管理,並注入類型 --> <bean name="user" class="com.Gary.bean.User"> <property name="u_id" value="1"/> <property name="u_username" value="Gary"/> <property name="u_password" value="123"/> <!-- 引用類型的注入 --> <property name="u_pet" ref="dog"/> </bean> <!-- 注入引用類型 --> <bean name="dog" class="com.Gary.bean.Pet"> <property name="petType" value="二哈"/> <property name="color" value="灰白"/> </bean> <!-- 構造方法注入 --> <bean name="user1" class="com.Gary.bean.User"> <constructor-arg name="u_username" value="Gary2"/> <constructor-arg name="u_pet" ref="dog"/> </bean> </beans>
如果有多個構造方法,可以使用type:指定參數的類型,index :指定參數
6、xml配置-屬性注入-復雜類型注入Array、List、Set、Map、Properties
在MyCollection.java中定義幾個復雜類型變量
//數組 private Object[] array; //list private List list; //set private Set set; //map private Map map; //properties private Properties properties;
<!-- 復雜類型注入 --> <bean name="collection" class="com.Gary.bean.MyCollection"> <!-- array --> <property name="array"> <array> <value>123</value> <value>abc</value> </array> </property> </bean>

package com.Gary.bean; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; public class MyCollection { //數組 private Object[] array; //list private List list; //set private Set set; //map private Map map; //properties private Properties properties; public Object[] getArray() { return array; } public void setArray(Object[] array) { this.array = array; } public List getList() { return list; } public void setList(List list) { this.list = list; } public Set getSet() { return set; } public void setSet(Set set) { this.set = set; } public Map getMap() { return map; } public void setMap(Map map) { this.map = map; } public Properties getProperties() { return properties; } public void setProperties(Properties properties) { this.properties = properties; } @Override public String toString() { return "MyCollection [array=" + Arrays.toString(array) + ", list=" + list + ", set=" + set + "]"; } }

package com.Gary.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.Gary.bean.MyCollection; import com.Gary.bean.User; public class Test_Injection { //Spring是一個容器,它將幫助我們管理對象 @Test public void Test2() { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext_Injection.xml"); MyCollection mc = (MyCollection) ac.getBean("collection"); System.out.println(mc); } }

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> <!-- 將user對象交給Spring管理,並注入類型 --> <bean name="user" class="com.Gary.bean.User"> <property name="u_id" value="1"/> <property name="u_username" value="Gary" /> <property name="u_password" value="123"/> <!-- 引用類型的注入 --> <property name="u_pet" ref="dog"/> </bean> <!-- 注入引用類型 --> <bean name="dog" class="com.Gary.bean.Pet"> <property name="petType" value="二哈"/> <property name="color" value="灰白"/> </bean> <!-- 構造方法注入 --> <bean name="user1" class="com.Gary.bean.User"> <constructor-arg name="u_username" value="Gary2" type=""/> <constructor-arg name="u_pet" ref="dog"/> </bean> <!-- 復雜類型注入 --> <bean name="collection" class="com.Gary.bean.MyCollection"> <!-- array --> <property name="array"> <array> <value>123</value> <value>abc</value> </array> </property> </bean> </beans>
同理剩下幾個復雜類型配置
<!-- 復雜類型注入 --> <bean name="collection" class="com.Gary.bean.MyCollection"> <!-- array --> <property name="array"> <array> <value>123</value> <value>abc</value> <ref bean="dog"/> </array> </property> <!-- list --> <property name="list"> <list> <value>456</value> <value>cba</value> <ref bean="user1"/> </list> </property> <!--set --> <property name="set"> <set> <value>111</value> <value>aaa</value> <ref bean="user1"/> </set> </property> <!-- map --> <property name="map"> <map> <entry key="username" value="root"/> <entry key="password" value="123"/> <entry key-ref="user1" value-ref="dog"/> </map> </property> <!-- properties --> <property name="prop"> <props> <prop key="name">老李</prop> <prop key="age">25</prop> </props> </property> </bean>

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> <!-- 將user對象交給Spring管理,並注入類型 --> <bean name="user" class="com.Gary.bean.User"> <property name="u_id" value="1"/> <property name="u_username" value="Gary" /> <property name="u_password" value="123"/> <!-- 引用類型的注入 --> <property name="u_pet" ref="dog"/> </bean> <!-- 注入引用類型 --> <bean name="dog" class="com.Gary.bean.Pet"> <property name="petType" value="二哈"/> <property name="color" value="灰白"/> </bean> <!-- 構造方法注入 --> <bean name="user1" class="com.Gary.bean.User"> <constructor-arg name="u_username" value="Gary2" type=""/> <constructor-arg name="u_pet" ref="dog"/> </bean> <!-- 復雜類型注入 --> <bean name="collection" class="com.Gary.bean.MyCollection"> <!-- array --> <property name="array"> <array> <value>123</value> <value>abc</value> <ref bean="dog"/> </array> </property> <!-- list --> <property name="list"> <list> <value>456</value> <value>cba</value> <ref bean="user1"/> </list> </property> <!--set --> <property name="set"> <set> <value>111</value> <value>aaa</value> <ref bean="user1"/> </set> </property> <!-- map --> <property name="map"> <map> <entry key="username" value="root"/> <entry key="password" value="123"/> <entry key-ref="user1" value-ref="dog"/> </map> </property> <!-- properties --> <property name="prop"> <props> <prop key="name">老李</prop> <prop key="age">25</prop> </props> </property> </bean> </beans>