1.26 注入set集合
戴着假发的程序员出品
[查看视频教程]
我们可以通过set标签对类中的set属性进行注入,无论属性是简单类型和引用类型。
案例:
准备账户类,拥有属性account,有参和无参构造方法
1 /** 2 * @author 戴着假发的程序员 3 * 4 * @description 账户 5 */ 6 public class Account { 7 private String account; 8 public Account(){ 9 } 10 public Account(String account) { 11 this.account = account; 12 } 13 public void setAccount(String account) { 14 this.account = account; 15 } 16 @Override 17 public String toString(){ 18 return "account:"+account; 19 } 20 }
准备账户组类,这个类拥有两个set集合类型的属性,一个accName存储字符串类型的账户名字,一个存储Account类型的账户对象。 拥有有参和无参构造方法。
1 /** 2 * @author 戴着假发的程序员 3 * 4 * @description 5 */ 6 public class Group { 7 //账户名字集合 8 private Set<String> accNames; 9 //账户对象集合 10 private Set<Account> accounts; 11 12 public void setAccNames(Set<String> accNames) { 13 this.accNames = accNames; 14 } 15 public void setAccounts(Set<Account> accounts) { 16 this.accounts = accounts; 17 } 18 //无参数构造 19 public Group(){ 20 } 21 //有参数构造 22 public Group(Set<String> accNames, Set<Account> accounts) { 23 this.accNames = accNames; 24 this.accounts = accounts; 25 } 26 public void showNames(){ 27 for(String name : accNames){ 28 System.out.print(name+"\t"); 29 } 30 System.out.println(); 31 } 32 public void showAccount(){ 33 for(Account account : accounts){ 34 System.out.print(accounts); 35 } 36 System.out.println(); 37 } 38 }
我们在配置文件中给group注入属性。使用set标签进行注入:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans default-autowire="byType" xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans.xsd"> 6 <!-- 准备三个accountBean --> 7 <bean id="account1" class="com.dk.demo2.beans.Account"> 8 <constructor-arg name="account" value="卡卡西"/> 9 </bean> 10 <bean id="account2" class="com.dk.demo2.beans.Account"> 11 <constructor-arg name="account" value="佐助"/> 12 </bean> 13 <bean id="account3" class="com.dk.demo2.beans.Account"> 14 <constructor-arg name="account" value="鸣人"/> 15 </bean> 16 <!-- 注册一个group --> 17 <bean id="group" class="com.dk.demo2.beans.Group"> 18 <property name="accNames"> 19 <!-- 使用set标签注入简单set集合属性 --> 20 <set> 21 <value>路飞</value> 22 <value>索隆</value> 23 <value>山治</value> 24 </set> 25 </property> 26 <property name="accounts"> 27 <!-- set标签注入引用类型属性 --> 28 <set> 29 <ref bean="account1"/> 30 <ref bean="account2"/> 31 <ref bean="account3"/> 32 </set> 33 </property> 34 </bean> 35 </beans>
测试:
1 @Test 2 public void testSet(){ 3 ApplicationContext ac = 4 new ClassPathXmlApplicationContext("applicationContext.xml"); 5 Group bean = ac.getBean(Group.class); 6 bean.showNames(); 7 bean.showAccount(); 8 }
结果:
当然对应引用类型其实我们也可以在set标签中利用bean标签直接实例化对象,例如:
1 <bean id="group" class="com.boxuewa.dk.demo2.beans.Group"> 2 <property name="accNames"> 3 <!-- 使用set标签注入简单set集合属性 --> 4 <set> 5 <value>路飞</value> 6 <value>索隆</value> 7 <value>山治</value> 8 </set> 9 </property> 10 <property name="accounts"> 11 <!-- set标签注入引用类型属性 --> 12 <set> 13 <bean class="com.dk.demo2.beans.Account"> 14 <constructor-arg name="account" value="乔峰"/> 15 </bean> 16 <bean class="com.dk.demo2.beans.Account"> 17 <constructor-arg name="account" value="虚竹"/> 18 </bean> 19 <bean class="com.dk.demo2.beans.Account"> 20 <constructor-arg name="account" value="段誉"/> 21 </bean> 22 </set> 23 </property> 24 </bean>
测试结果:
注意:上面的所有注入方式也都适合构造方法的注入。例如:
<!-- 注册一个group --> <bean id="group" class="com.dk.demo2.beans.Group"> <constructor-arg name="accNames"> <!-- 使用set标签注入简单set集合属性 --> <set> <value>路飞</value> <value>索隆</value> <value>山治</value> </set> </constructor-arg> <constructor-arg name="accounts"> <!-- set标签注入引用类型属性 --> <set> <bean class="com.dk.demo2.beans.Account"> <constructor-arg name="account" value="乔峰"/> </bean> <bean class="com.dk.demo2.beans.Account"> <constructor-arg name="account" value="虚竹"/> </bean> <bean class="com.dk.demo2.beans.Account"> <constructor-arg name="account" value="段誉"/> </bean> </set> </constructor-arg> </bean>
我是戴着假发的程序员,分享技术,分享经验,如果要转载,请注明:出自戴着假发的程序员