spring学习----工厂Bean
?
当我们需要用到工厂模式的时候,也可以交给Spring容器管理,此时Spring容器管理的就不是普通Bean,可称为“工厂Bean”。此时,应用程序调用getBean()是,Spring返回的不是直接创建的Bean,而是“工厂Bean”创建的Bean。如下图所示:

?
那Spring怎么配置工厂Bean,方法如下:
一,使用静态工厂
?
?
?
?
?
?
调用getBean("emptyObject")便会调用StaticFactoryBean的createEmptyObject()方法,返回一个Object对象
?
?
?
二,使用实例工厂
?
?
?
?
?
第一个Bean指定实例工厂,第二个Bean指定实例工厂名称和方法名。调用getBean("currentTime")即会调用InstanceFactoryBean的createTime方法
?
?
三,实现FactoryBean接口
FactoryBean源代码如下:
?
?
?
实现FactoryBean接口的对象,本身就是工厂类。如果一个bean实现了这个接口,它是用来作为对象创建的工厂,而不是直接将本身作为一个bean实例。
注:实现该接口的bean不能被用来作为一个普通的bean。一个FactoryBean定义bean的风格,但返回bean引用的对象getObject(),始终是它创建的对象。
FactoryBean可以支持单例和原型,延迟或启动创建对象。SmartFactoryBean接口允许更细粒度的控制。
在框架中有很多实现了此接口,例如为AOP:org.springframework.aop.framework.ProxyFactoryBean或org.springframework.jndi.JndiObjectFactoryBean。?
?
?