Spring属性装配之属性类型是另外一个被装载的类

如果属性类型是另外一个被装载的类,可以使用标签来装配属性值。

比如一个JavaBean中的某个属性是另外一个JavaBean的对象,而且要装备这个属性,那么就需要使用来标签ref进行装配。

MyBean类的hello属性是HelloService的类型,代码如下:

 

MyBean.java


  1. package chapter22;  
  2.   
  3. public class MyBean {  
  4.     private int iValue;  
  5.     private String strName;  
  6.     private HelloService hello;  
  7.   
  8.     public int getiValue() {  
  9.         return iValue;  
  10.     }  
  11.   
  12.     public void setiValue(int iValue) {  
  13.         this.iValue = iValue;  
  14.     }  
  15.   
  16.     public String getStrName() {  
  17.         System.out.println("getStrName()方法被调用");  
  18.         return strName;  
  19.     }  
  20.   
  21.     public void setStrName(String strName) {  
  22.         this.strName = strName;  
  23.         System.out.println("setStrName()方法被调用");  
  24.     }  
  25.   
  26.     public HelloService getHello() {  
  27.         System.out.println("getHello()方法被调用");  
  28.         return hello;  
  29.     }  
  30.   
  31.     public void setHello(HelloService hello) {  
  32.         this.hello = hello;  
  33.         System.out.println("setHello()方法被调用");  
  34.     }  
  35. }  

然后在applicationContext.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" xmlns:p="http://www.springframework.org/schema/p"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
  5.     <bean id="helloservice" class="chapter22.HelloServiceImpl">  
  6.         <property name="greeting" value="greeting Xu Wei">  
  7.         </property>  
  8.     </bean>  
  9.     <bean id="myBean" class="chapter22.MyBean">  
  10.         <property name="hello">  
  11.             <ref bean="helloservice" />  
  12.         </property>  
  13.         <property name="strName" value="Xu Wei"></property>  
  14.     </bean>  
  15. </beans>  

添加一个TestMyBean类,代码如下

 

TestMyBean.java


  1. package chapter22;  
  2.   
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.support.FileSystemXmlApplicationContext;  
  5.   
  6. public class TestMyBean {  
  7.     public static void main(String args[]) {  
  8.         ApplicationContext ctx = new FileSystemXmlApplicationContext(  
  9.                 "src//applicationContext.xml");  
  10.         MyBean mb = (MyBean) ctx.getBean("myBean");  
  11.         // System.out.println(mb.getHello());  
  12.         System.out.println(mb.getHello().getGreeting());  
  13.         System.out.println(mb.getStrName());  
  14.     }  
  15. }  

最后的输出结果如下:

log4j:WARN No appenders could be found for logger (org.springframework.context.support.FileSystemXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
setGreeting()方法被调用
setHello()方法被调用
setStrName()方法被调用
getHello()方法被调用
getGreeting()方法被调用
greeting Xu Wei
getStrName()方法被调用
Xu Wei
分析:

mb.getStrName是直接传参进去的,而这里通过ref穿进去的是hello,hello本身是一个对象,所以mb.getHello().getGreeting()获得的是hello配置的参数。








本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2010/09/12/2297094.html,如需转载请自行联系原作者

上一篇:Spring装配集合属性


下一篇:使用boost中的property_tree实现配置文件