gpt4 book ai didi

spring - 在运行时将动态属性应用于 bean

转载 作者:行者123 更新时间:2023-12-04 18:53:53 26 4
gpt4 key购买 nike

假设我有一个 bean 对话框,具有高度和宽度的属性:

public class DialogBox {
int x;
int y;
...
}

在我的 applicationContext.xml 中,我会将属性定义为合理的默认值:
<bean id="dialogbox" class="DialogBox">
<property name="x" value="100"/>
<property name="y" value="100"/>
</bean>

我们有多个使用 dialogBox bean 的客户端,每个客户端都需要自定义的 x 和 y 值。我们讨论的一种方法是拥有多个属性文件,每个客户端一个,并将客户端 ID 映射到正确的文件,例如客户端 123 将映射到 dialogbox_123.properties:
dialogbox_123.properties:
x=200
y=400

然后在运行时请求 bean 时,spring 会查看是否存在客户端的自定义属性文件,并使用这些属性,否则使用默认值。我知道 PropertyOverrideConfigurer,但是 AFAIK 这仅在上下文启动时有效,因此不适用于我们的目的。 Spring 是否有现有设施可以实现这一目标,或者有人可以推荐另一种方式吗?

最佳答案

  • 使用FactoryBean (如前所述)自定义实例化。
  • 设置 scope="prototype"在 bean 上,因此每次需要一个实例时,都应该创建一个新实例。
  • 如果你想注入(inject) prototype bean 入singleton bean ,使用 lookup-method ( Search for lookup-method here )

  • 我不确定这是否适合您的情况。另一个建议是:

    @PostConstruct您的各种“客户”的方法在已注入(inject)的对话窗口上根据需要设置属性。像:
    public class MyDialogClient {
    @Autowired
    private Dialog dialog;

    @PostConstruct
    public void init() {
    dialog.setWidth(150); //or read from properties file
    dialog.setHeight(200);
    }
    ...
    }

    同样,在这种情况下,您可以使用 scope属性。

    关于spring - 在运行时将动态属性应用于 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2008175/

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