我想一起使用 FactoryBeans 和作用域。具体来说,我希望将 FactoryBean 创建和返回的对象放置到指定的(可能是自定义的)范围中。问题在于执行以下操作:
<bean class="x.y.z.TestFactoryBean" scope="test" />
导致 FactoryBean 本身被限定作用域,并且对工厂创建的对象有一些不可预测的行为。我明白这是为什么;工厂本身是一个一流的 spring 管理的 bean,并且有自己的生命周期。但是,我找不到一种方法来指定从工厂返回的对象本身应该被限定范围。
另一方面,这正是我想要的(只要 TestFactoryBean 不实现 FactoryBean 接口):
<bean class="x.y.z.TestFactoryBean" name="testFactory">
<bean class="x.y.z.TestBean" factory-bean="testFactory"
factory-method="getObject" scope="test" />
所以真正的问题是,如何让 Spring 表现得像上面第二个示例一样,但使用真正的 FactoryBeans?
您不能轻松地在从 a 返回的 bean 上使用自定义范围FactoryBean
.
来自春天的Java 文档 http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/beans/factory/FactoryBean.html:
FactoryBeans可以支持单例和原型
如果你想要FactoryBean
的返回 bean 具有原型范围,那么您必须实现isSingleton()
像这样的方法:
public class TestFactoryBean implements FactoryBean<TestBean> {
// the rest of the required methods are removed for simplicity reasons..
public boolean isSingleton() {
return false;
}
}
要支持自定义作用域,您必须自己实现逻辑,并且它不会很直观,因为FactoryBean
只提供isSingleton()
方法。我宁愿推荐使用其他解决方案而不是FactoryBean
对于具有自定义范围的 bean。
希望这可以帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)