我想将FactoryBeans和范围一起使用.具体来说,我希望FactoryBean创建并返回的对象放在指定的(可能是自定义的)范围内.问题是执行以下操作:
<bean class="x.y.z.TestFactoryBean" scope="test" />
Run Code Online (Sandbox Code Playgroud)
FactoryBean本身的结果是作用域,并且对工厂创建的对象有一些不可预测的行为.我明白为什么会这样; 工厂本身是一流的春季管理的豆,并有自己的生命周期.但是,我找不到一种方法来指定从工厂返回的对象本身应该作用域.
另一方面,这正是我想要的(只要TestFactoryBean不实现FactoryBean接口):
<bean class="x.y.z.TestFactoryBean" name="testFactory">
<bean class="x.y.z.TestBean" factory-bean="testFactory"
factory-method="getObject" scope="test" />
Run Code Online (Sandbox Code Playgroud)
所以真正的问题是,我如何使Spring的行为与上面的第二个例子一样,但是使用真正的FactoryBeans?
您无法在从a返回的bean上轻松使用自定义作用域FactoryBean.
从Spring的Java文档:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
要支持自定义范围,您必须自己实现逻辑,并且它不会非常直观,因为FactoryBean它只提供了isSingleton()方法.我宁愿推荐使用另一种解决方案,而不是FactoryBean使用自定义范围的bean.
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
5997 次 |
| 最近记录: |