Spring IOC ( 二) : FactoryBean接口(转载)


原网址:http://weilingfeng98.iteye.com/blog/836637

FactoryBean接口定义了以下3个接口方法: 

   Object getObject():返回有FactoryBean创建的Bean实例,如果isSingleton()返回true,则该实例会放到Spring容器的单实例缓存池中。 

    boolean isSingleton():确定由FactoryBean创建Bean的作用域是singleton还是prototype. 

   Class getObjectType():返回FactoryBean创建Bean的类型。 

当配置文件中 <bean>的class属性配置的实现类是FactoryBean时,通过getBean方法返回的不是FactoryBean本身,而是 FactoryBean#getObject()方法所返回的对象,相当于FactoryBean#getObject()代理了getBean()方 法。 

    我们在配置Car时,Car的每个属性分别对应一个<property>元素标签。假设我们嫌这种方式不苟简洁,而希望通过逗号分隔的方式一次性的为Car的所有属性制定配置值,那么我们可以通过编写一个FactroyBean来达到目的: 

   import org.springframework.beans.factory.FactoryBean;

Java代码 复制代码  收藏代码
  1.     public class CarFactoryBean implements FactoryBean{    
  2.   
  3.        private String carInfo;    
  4.   
  5.        public Stirng getCarInfo(){    
  6.   
  7.          return carInfo;    
  8.   
  9.    }    
  10.   
  11.       public void setCarInfo(String carInfo){    
  12.   
  13.        this.carInfo=carInfo;    
  14.   
  15. }    
  16.   
  17.      public Object getObject()throws Exception{    
  18.   
  19.         Car car=new Car();    
  20.   
  21.         String[]infos = carInfo.split(",");    
  22.   
  23.          car.setBrand(infos[0]);    
  24.   
  25.         car.setMaxSpeed(Integer.aarseInt(infos[1]));    
  26.   
  27.         car.setPrice(Double.parseDouble(infos[2]));    
  28.   
  29.         return car;    
  30.   
  31. }    
  32.   
  33.      public Class getObjectType(){    
  34.   
  35.      return Car.class;    
  36.   
  37. }    
  38.   
  39.     public boolean isSingleton() {    
  40.   
  41.      return true;    
  42.   
  43.    }    
  44.   
  45. }   
    public class CarFactoryBean implements FactoryBean{ 

       private String carInfo; 

       public Stirng getCarInfo(){ 

         return carInfo; 

   } 

      public void setCarInfo(String carInfo){ 

       this.carInfo=carInfo; 

} 

     public Object getObject()throws Exception{ 

        Car car=new Car(); 

        String[]infos = carInfo.split(","); 

         car.setBrand(infos[0]); 

        car.setMaxSpeed(Integer.aarseInt(infos[1])); 

        car.setPrice(Double.parseDouble(infos[2])); 

        return car; 

} 

     public Class getObjectType(){ 

     return Car.class; 

} 

    public boolean isSingleton() { 

     return true; 

   } 

} 
 

有了这个CarFactoryBean后,我们就可以在配置文件中使用以下的配置方式定义Car Bean了: 

      <bean id="car" class="com.lxm.fb.carFactoryBean"> 

          <property name="carInfo" value="红旗CA72,200,20000.00"/> 

</bean> 

当调用getBean("car")时,Spring通过反射机制发现CarFactoryBean实现了FactoryBean的接口,这时 Sping容器就调用接口方法CarFactoryBean#getObject()返回工厂类创建的对象。如果用户希望获取 CarFactoryBean的实例,则需要在使用getBean(beanName)方法时显式地在beanName前加上“&”前 缀:getBean("&cr").
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值