Spring学习笔记(10)----公共属性的注入配置

假设我们定义了四个bean类,其代码分别如下:

Java代码
  1. package com.szy.spring.bean;   
  2.   
  3. public class Bean1 {   
  4.     private Bean2 bean2;   
  5.     private Bean3 bean3;   
  6.     private Bean4 bean4;   
  7.   
  8.     public Bean2 getBean2()   
  9.     {   
  10.         return bean2;   
  11.     }   
  12.     public void setBean2(Bean2 bean2)   
  13.     {   
  14.         this.bean2 = bean2;   
  15.     }   
  16.     public Bean3 getBean3()   
  17.     {   
  18.         return bean3;   
  19.     }   
  20.     public void setBean3(Bean3 bean3)   
  21.     {   
  22.         this.bean3 = bean3;   
  23.     }   
  24.     public Bean4 getBean4()   
  25.     {   
  26.         return bean4;   
  27.     }   
  28.     public void setBean4(Bean4 bean4)   
  29.     {   
  30.         this.bean4 = bean4;   
  31.     }   
  32. }  

 

Java代码
  1. package com.szy.spring.bean;   
  2.   
  3. public class Bean2   
  4. {   
  5.     private int id;   
  6.     private String name;   
  7.     private String password;   
  8.   
  9.     public int getId()   
  10.     {   
  11.         return id;   
  12.     }   
  13.     public void setId(int id)   
  14.     {   
  15.         this.id = id;   
  16.     }   
  17.     public String getName()   
  18.     {   
  19.         return name;   
  20.     }   
  21.     public void setName(String name)   
  22.     {   
  23.         this.name = name;   
  24.     }   
  25.     public String getPassword()   
  26.     {   
  27.         return password;   
  28.     }   
  29.     public void setPassword(String password)   
  30.     {   
  31.         this.password = password;   
  32.     }   
  33. }  

 

Java代码
  1. package com.szy.spring.bean;   
  2.   
  3. public class Bean3   
  4. {   
  5.     private int id;   
  6.     private String name;   
  7.   
  8.     public int getId()   
  9.     {   
  10.         return id;   
  11.     }   
  12.     public void setId(int id)   
  13.     {   
  14.         this.id = id;   
  15.     }   
  16.     public String getName()   
  17.     {   
  18.         return name;   
  19.     }   
  20.     public void setName(String name)   
  21.     {   
  22.         this.name = name;   
  23.     }   
  24. }  

 

 

Java代码
  1. package com.szy.spring.bean;   
  2.   
  3. public class Bean4   
  4. {   
  5.     private int age;   
  6.   
  7.     public int getAge()   
  8.     {   
  9.         return age;   
  10.     }   
  11.     public void setAge(int age)   
  12.     {   
  13.         this.age = age;   
  14.     }   
  15. }  

按照正常的思路,我们下面就要给每个类进行属性的注入,配置文件如下设置:

Xml代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:tx="http://www.springframework.org/schema/tx"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
  7.                 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd   
  8.                 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">  
  9.     <bean id="bean1" class="com.szy.spring.bean.Bean1">  
  10.         <property name="bean2" ref="bean2"/>  
  11.         <property name="bean3">  
  12.             <ref bean="bean3"/>  
  13.         </property>      
  14.         <property name="bean4" ref="bean4"/>  
  15.     </bean>  
  16.        
  17.     <bean id="bean2" class="com.szy.spring.bean.Bean2">  
  18.         <property name="id" value="100"/>  
  19.         <property name="name">  
  20.             <value>kuka</value>  
  21.         </property>  
  22.         <property name="password" value="123"/>  
  23.     </bean>  
  24.        
  25.     <bean id="bean3" class="com.szy.spring.bean.Bean3">  
  26.         <property name="id" value="100"/>  
  27.         <property name="name" value="kuka"/>  
  28.     </bean>  
  29.         
  30.     <bean id="bean4" class="com.szy.spring.bean.Bean4">  
  31.         <property name="age" value="22"/>  
  32.     </bean>  
  33. </beans>  

我们进行测试:

Java代码
  1. @Test  
  2.     public void testMethod() throws Exception   
  3.     {   
  4.         ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");   
  5.         Bean1 bean1 = (Bean1)ctx.getBean("bean1");   
  6.            
  7.         System.out.println("bean1.bean2.id=" + bean1.getBean2().getId());   
  8.         System.out.println("bean1.bean2.name=" + bean1.getBean2().getName());   
  9.         System.out.println("bean1.bean2.password=" + bean1.getBean2().getPassword());   
  10.         System.out.println("bean1.bean3.id=" + bean1.getBean3().getId());   
  11.         System.out.println("bean1.bean3.name=" + bean1.getBean3().getName());   
  12.         System.out.println("bean1.bean4.age=" + bean1.getBean4().getAge());   
  13.     }  

正常输出我们所预期的信息,但是我们观察发现bean2和bean3的部分属性的配置信息是相同的,这仅是两个bean,如果是多个bean的话我们要修改就好修改多处,因此我们可以把这些公共的部分提出出来,进行抽象。这个在Spring中是支持的。我们在建立一个配置文件,命名为:applicationCommon.xml,其内容如下配置

Xml代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:tx="http://www.springframework.org/schema/tx"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
  7.                 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd   
  8.                 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">  
  9.      <bean id="beanAbstract" abstract="true">  
  10.         <property name="id" value="100"/>  
  11.         <property name="name" value="kuka"/>  
  12.    </bean>            
  13.       
  14.    <bean id="bean2" class="com.szy.spring.bean.Bean2" parent="beanAbstract">  
  15.             <property name="password" value="123"/>  
  16.    </bean>           
  17.       
  18.    <bean id="bean3" class="com.szy.spring.bean.Bean3" parent="beanAbstract"/>  
  19.        
  20. </beans>  

 beanAbstract就是我们抽象出来的,设置abstract="true"属性后就不需要指定class属性。

我们把原来配置文件里的关于bean2和bean3节点注释掉。

下面进行测试,在这里要注意由于我们使用了两个配置文件,因此我们在读取是要写两个配置文件名。我们查看ClassPathXmlApplicationContext源文件发现其有个构造函数参数是string数组,因此我们可以把这个配置文件名放在数组里面。此外我们还有另外一种实现方法,两个配置文件一个叫applicationContext.xml,另一个applicationCommon.xml,公共部分是applicationC*.xml,下面我们就可以这样进行测试:

Java代码
  1. @Test  
  2.     public void testMethod() throws Exception   
  3.     {   
  4.         ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationC*.xml");   
  5.         Bean1 bean1 = (Bean1)ctx.getBean("bean1");   
  6.            
  7.         System.out.println("bean1.bean2.id=" + bean1.getBean2().getId());   
  8.         System.out.println("bean1.bean2.name=" + bean1.getBean2().getName());   
  9.         System.out.println("bean1.bean2.password=" + bean1.getBean2().getPassword());   
  10.         System.out.println("bean1.bean3.id=" + bean1.getBean3().getId());   
  11.         System.out.println("bean1.bean3.name=" + bean1.getBean3().getName());   
  12.         System.out.println("bean1.bean4.age=" + bean1.getBean4().getAge());   
  13.     }  

如果我们bean2的name属性的值不是kuka,那么我们只需在applicationCommon.xml文件的bean2节点下再添加property属性即可

Xml代码
  1. <property name="name" value="coolszy"/>  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值