FactoryBean

在Spring BeanFactory容器中管理两种bean  

  • 1.标准Java Bean  
  • 2.另一种是工厂Bean,   即实现了FactoryBean接口的bean  它不是一个简单的Bean 而是一个生产或修饰对象生成的工厂Bean
  • 3.在向Spring容器获得bean时  对于标准的java Bean  返回的是类自身的实例 
  • 4.而FactoryBean 其返回的对象不一定是自身类的一个实例,返回的是该工厂Bean的getObject方法所返回的对象

简单的例子如下:

public class SayHelloFactoryBeanImpl implements FactoryBean {  
  
    /** 
     * 返回该工厂生成的bean 
     */  
    public Object getObject() throws Exception {  
        return new ChinaSayHelloServiceImpl();  
    }  
  
    /** 
     * getObject返回对象对应的Class 
     */  
    public Class getObjectType() {  
        return ChinaSayHelloServiceImpl.class;  
    }  
      
    /** 
     * getObject返回的对象 是否是一个单例 
     */  
    public boolean isSingleton() {  
        return false;  
    }  
}  

<bean id="sayHelloFactoryBean" class="com.xx.service.impl.SayHelloFactoryBeanImpl" />  

ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:applicationContext-server.xml"}, true);  
//bean的 getObject方法 返回的对象  
Object object = context.getBean("sayHelloFactoryBean");  
System.out.println(object);  

 

 

当一个受Spring容器管理的bean  如果实现了FactoryBean接口  在bean实例化(getBean)阶段  Spring会调用该bean的getObejct方法 返回的不一定是自身的实例

 

Spring 框架中有很多FactoryBean 

 

  1.  RmiProxyFactoryBean,
  2. SqlMapClientFactoryBean.
  3. LocalSessionFactoryBean

 

 最后关于Spring容器是如何针对普通的bean和factoryBean做出不同的响应的,可以参看AbstractBeanFactory getBean方法入口:具体的分析见http://blog.csdn.net/java2000_wl/article/details/7410714

你可能感兴趣的:(spring)