gpt4 book ai didi

java - 基于动态构造函数值的 Spring bean 作用域

转载 作者:搜寻专家 更新时间:2023-11-01 03:26:14 24 4
gpt4 key购买 nike

我必须根据动态构造函数值创建一个需要缓存的 bean。示例:我需要一个 OrganizationResource bean,其中“x”(构造函数值)组织将具有其自己的特定实例值,而“y”(构造函数值)将具有不同的值。但是我不想为每个 x 值创建一个新对象,我希望它被缓存。

我知道动态构造函数值有 2 个作用域,单例和原型(prototype)。打算用prototype,但是貌似每次都会创建一个新对象,请问spring中如何实现基于构造函数值的缓存?

最佳答案

FactoryBean 是一种可行的方法。非常简单,试试吧。您所要做的就是创建一个实现 FactoryBean 的类并在 bean 定义文件中引用它:

package some.package;
import org.springframework.beans.factory.FactoryBean;

public class ExampleFactory implements FactoryBean {

private String type;

public Object getObject() throws Exception {
//Logic to return beans based on 'type'
}

public Class getObjectType() {
return YourBaseType.class;
}

public boolean isSingleton() {
//set false to make sure Spring will not cache instances for you.
return false;
}

public void setType(final String type) {
this.type = type;
}}

现在,在您的 bean 定义文件中,放入:

<bean id="cached1" class="some.package.ExampleFactory">
<property name="type" value="X" />
</bean>

<bean id="cached2" class="some.package.ExampleFactory">
<property name="type" value="Y" />
</bean>

它将根据您在 ExampleFactory.getObject() 中实现的策略生成对象。

关于java - 基于动态构造函数值的 Spring bean 作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13231496/

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