gpt4 book ai didi

java - 将状态传递给 CDI 容器管理的 bean

转载 作者:太空宇宙 更新时间:2023-11-04 07:15:41 25 4
gpt4 key购买 nike

我在这个项目中使用 Spring,但我在使用 Guice 时也遇到了同样的问题。

基本上,我的功能需要无状态助手和状态数据来操作。

public class AwesomeDoer {
@Inject
private Helper helper; //stateless
...
public void doAwesome(int state) {
helper.help(state)
}

}

这看起来相当不错,直到 doAwesome 有 5 个参数并被调用 1000 次,但其中 3 个参数每次都是相同的值,而第四个参数可能只改变几次。更改字段的适当参数是显而易见的解决方案。然而,这要求您牺牲此类的 CDI 管理,或者您必须有一个初始化器或 setter 来在 Spring 完成其工作后填充状态。

我通常通过创建一个由 Spring 管理的工厂来解决这个问题,即

public class AwesomeFactory {
@Inject
private Helper helper;

public AwesomeDoer getAwesomeDoer(int state) {
return new AwesomeDoer(helper, state);
}
}

但是,这又意味着我的 AwesomeDoer 不再由 Spring 管理,它需要我编写另一层非业务逻辑。也很容易想象这种方法会导致创建 AwesomeFactoryFactory 等,这总是让我内心有些崩溃。

那么有人有更干净的方法吗?

最佳答案

您可以使用 Spring 中的 @Configurable 标记您的 bean,并使用 new AwesomeDoer 创建它并在构造函数中传递参数。 @Configurable 让您按需创建 bean,并且该 bean 将由 Spring 管理以像 @Autowired 一样触发注入(inject)。

更多信息:Create a bean using new keyword and managed by Spring ,检查底部的部分。

关于java - 将状态传递给 CDI 容器管理的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20009922/

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