spring factorybean

1.概述  
         Spring中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean,即FactoryBean,这两种Bean都被容器管理,但工厂 Bean跟普通Bean不同,其返回的对象不是指定类的一个实例,其返回的是该FactoryBean的getObject方法所返回的对象。在 Spring框架内部,有很多地方有FactoryBean的实现类,它们在很多应用如(Spring的AOP、ORM、事务管理)及与其它第三框架 (ehCache)集成时都有体现,下面简单分析FactoryBean的用法。 

2.实例  
以下SimpleFactoryBean类实现了FactoryBean接口中的三个方法。 并将该类配置在XML中。 

Java代码   收藏代码
  1. public  class  SimpleFactoryBean implements  FactoryBean {  
  2.         private  boolean  flag;  
  3.       
  4.         public  Object getObject() throws  Exception {  
  5.             if  (flag) {  
  6.                 return  new  Date();  
  7.             }  
  8.             return  new  String("false");  
  9.         }  
  10.       
  11.         @SuppressWarnings ("unchecked")  
  12.         public  Class getObjectType() {  
  13.             return  flag ? Date.class  : String.class ;  
  14.         }  
  15.       
  16.         public  boolean  isSingleton() {  
  17.             return  false ;  
  18.         }  
  19.       
  20.         public  void  setFlag(boolean  flag) {  
  21.             this .flag = flag;  
  22.         }  
  23.     }  
  24.       
  25.     <bean id="factoryBeanOne" class ="com.study.demo.factorybean.SimpleFactoryBean" >  
  26.         <property name="flag">  
  27.             <value>true </value>  
  28.         </property>  
  29.     </bean>  
  30.       
  31.     <bean id="factoryBeanTwo" class ="com.study.demo.factorybean.SimpleFactoryBean" >  
  32.         <property name="flag">  
  33.             <value>false </value>  
  34.         </property>  
  35.     </bean>  
  36.       
  37.     public  class  MainTest {  
  38.         public  static  void  main(String[] args) {  
  39.             Resource res = new  ClassPathResource("bean.xml");  
  40.             BeanFactory factory = new  XmlBeanFactory(res);  
  41.             System.out.println(factory.getBean("factoryBeanOne").getClass());  
  42.             System.out.println(factory.getBean("factoryBeanTwo").getClass());  
  43.         }  
  44.     }  



通过简单的测试可知,该类输出如下: 
class java.util.Date 
class java.lang.String 
也就是说,容器通过getBean方法返回的不是FactoryBean本身,而是FactoryBean实现类中getObject()方法所返回的对象。

你可能感兴趣的:(FactoryBean)