SimpleFactoryBean类实现FactoryBean接口的三个方法

作者: 2011/12/10 10:07:15
  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()方法所返回的对象。

特别推荐

玩家留言 跟帖评论
查看更多评论