gpt4 book ai didi

java - Spring FactoryBean 和作用域协同工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:47:39 24 4
gpt4 key购买 nike

我想一起使用 FactoryBeans 和范围。具体来说,我希望将 FactoryBean 创建和返回的对象放入指定的(可能是自定义的)范围内。问题在于执行以下操作:

<bean class="x.y.z.TestFactoryBean" scope="test" />

导致 FactoryBean 本身被限定范围,并且对工厂创建的对象具有某种不可预测的行为。我明白这是为什么;工厂本身是一流的 spring 管理的 bean,并且有自己的生命周期。但是,我找不到一种方法来指定从工厂返回的对象本身应该在范围内。

另一方面,这正是我想要的(只要 TestFactoryBean 不实现 FactoryBean 接口(interface)):

<bean class="x.y.z.TestFactoryBean" name="testFactory">
<bean class="x.y.z.TestBean" factory-bean="testFactory"
factory-method="getObject" scope="test" />

所以真正的问题是,我怎样才能使 Spring 像上面第二个示例一样运行,但使用真正的 FactoryBeans?

最佳答案

您不能轻易地在从 FactoryBean 返回的 bean 上使用自定义作用域。

来自 Spring 的 Java documentation :

FactoryBeans can support singletons and prototypes

如果您希望FactoryBean 的返回bean 具有原型(prototype)作用域,那么您必须像这样实现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() 方法。对于具有自定义作用域的 bean,我宁愿推荐使用不同于 FactoryBean 的另一种解决方案。

希望这对您有所帮助!

关于java - Spring FactoryBean 和作用域协同工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2830337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com