假设我有一个类只生成一些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>();
}
}
这样的课程应该是什么样的?我应该把它留给@Dependent
还是有最好的练习?我读过CDI
单身人士对此有好处但我真的不喜欢不知道为什么。
答案 0 :(得分:7)
这个帖子是我在这个主题上唯一能找到的。由于我没有找到完全令人满意的答案,我进行了一个小实验,在那里我曾经宣布该类包含一个带有<tr ng-repeat="foot in countries | orderBy:orderByField:reverse | filter:search" country="country">
注释的@Produces
方法,一次没有它。我在私有构造函数中跟踪了我的生成器类的实例的构造。
我发现在使用@ApplicationScoped
注释生产者类的情况下,只创建了一个实例,这是相当明显的。但是没有注释,每当调用@ApplicationScoped
方法时,都会创建一个新实例,因为bean的实例已经创建了生成类型。
因此,在使生成器类@Produces
减少(不必要)对象创建时可能会有一点意义。但是,由于现在假设对象创建如此便宜,如果生产者类至少有一些状态要初始化,那么这可能只是相关的。
答案 1 :(得分:2)
包含生产者的类的范围实际上并不重要,但是,生成的项目的范围很重要。如果生成器字段/方法上没有范围注释,那么它将在包含类的范围内生成该对象。
答案 2 :(得分:0)
由于此类是无状态的(不在成员变量中存储值)并且不依赖于作用域实例,因此可以安全地使用单例。