Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2579112
  • 博文数量: 320
  • 博客积分: 9650
  • 博客等级: 中将
  • 技术积分: 3886
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-27 21:05
文章分类

全部博文(320)

文章存档

2024年(1)

2017年(5)

2016年(10)

2015年(3)

2014年(3)

2013年(10)

2012年(26)

2011年(67)

2010年(186)

2009年(9)

分类: Java

2010-06-02 20:14:24

假设我们定义了四个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=""  
  3.     xmlns:xsi=""  
  4.     xmlns:context=""  
  5.     xmlns:tx=""  
  6.     xsi:schemaLocation=" /spring-beans-2.5.xsd   
  7.                  /spring-context-2.5.xsd   
  8.                  /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>kukavalue>  
  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=""  
  3.     xmlns:xsi=""  
  4.     xmlns:context=""  
  5.     xmlns:tx=""  
  6.     xsi:schemaLocation=" /spring-beans-2.5.xsd   
  7.                  /spring-context-2.5.xsd   
  8.                  /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"/>  

 

  • (2.6 MB)
阅读(2946) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~