gpt4 book ai didi

java - 您在 CDI 中使用生产者方法的类的范围是什么?

转载 作者:行者123 更新时间:2023-12-01 09:20:32 24 4
gpt4 key购买 nike

假设我有一个类,它只生成一些 bean、列表、项目等,比如

public class MightyProducer {

@Produces
public Bean1 someBean() {
//some init
return new Bean1();
}

@Produces
@CoolItems
public List<Items> items() {
//some init
return new ArrayList<Item>();
}

}

像这样的类(class)的范围应该是什么?我应该把它留给 @Dependent吗?或者有什么最佳实践吗?我在某处读过 CDI Singleton 对此有好处,但我真的不知道为什么。

最佳答案

这个线程是我能找到的关于这个主题的唯一一个。由于我没有找到完全令人满意的答案,所以我进行了一个小实验,我曾经声明包含 @Produces 的类带有 @ApplicationScoped 的方法注释和一次没有它。我在私有(private)构造函数中跟踪了生产者类实例的构造。

我发现在生产者类用 @ApplicationScoped 注释的情况下,只创建了一个实例,这是相当明显的。但是如果没有注释,只要 @Produces 出现,就会创建一个新实例。由于创建了注入(inject)了生成类型的 bean 的实例,因此调用了方法。

所以制作生产者类 @ApplicationScoped 可能有一点意义。减少(不必要的)对象创建。但是由于现在对象创建被认为如此便宜,所以这可能只有在生产者类至少有一些要初始化的状态时才有意义。

关于java - 您在 CDI 中使用生产者方法的类的范围是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19427608/

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