FactoryBean

在Spring BeanFactory容器中管理两种bean  

1.标准Java Bean  

2,另一种是工厂Bean,   即实现了FactoryBean接口的bean  它不是一个简单的Bean 而是一个生产或修饰对象生成的工厂Bean

在向Spring容器获得bean时,对于标准的java Bean,返回的是类自身的实例.

而FactoryBean 其返回的对象不一定是自身类的一个实例,返回的是该工厂Bean的getObject方法所返回的对象.

一个简单的例子

[java]

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);  

控制台输出

com.xx.service.impl.ChinaSayHelloServiceImpl@1f66cff

容器返回的是 bean getObject方法返回对象  而不是SayHelloFactoryBeanImpl自身的实例 当然可以用“&”符号转义 获得FactoryBean的自身实例

你可能感兴趣的:(java)