FactoryBean 与 BeanFactory
首先从字面理解: FactoryBean -->工厂Bean; BeanFactory -->Bean工厂。
即: FacttoryBean 是一个bean, BeanFactory 是bean的工厂。
使用:
1、BeanFactory: 提供获取bean的API。
2、FactoryBean:
public class TestBeanFactory implements FactoryBean {@Overridepublic Object getObject() throws BeansException {//用户自己创建对象TestInBean testInBean = new TestInBean();testInBean.setName("zs");return testInBean;}@Overridepublic boolean isSingleton() {return false;}@Overridepublic PropertyValues getPropertyValues() {return null;}
}
applicationContext.xml
<beans><bean id="TestFactoryBean" class="org.springframework.z_test.com.bean.TestBeanFactory"></bean>
</beans>
测试类:
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("/applicationContext.xml");Object testFactoryBean = applicationContext.getBean("TestFactoryBean");System.out.println(testFactoryBean);
输出结果:
TestInBean{name='zs', age=null}
上述案例TestBeanFactory 实现了FactoryBean接口,并且将FactoryBean交由Spring进行管理(配置文件),在获取对象的时候获取到的是用户自定义创建的对象 TestInBean,而不是TestBeanFactory。
原理:从Spring容器中获取到的bean对象是FactoryBean或者是实现FactoryBean的,会使用getObject()获取到真实的bean对象,这个对象是由用户自己进行创建管理的,体现了扩展性
通过上述可以得到:
BeanFactory提供了获取Bean的方式,(BeanFactory是Spring核心接口之一)
FactoryBean是一个特殊的bean,实现该接口可以自定义实现bean的创建逻辑(扩展性)。