假设我有一个仅产生一些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>();
}
}
Run Code Online (Sandbox Code Playgroud)
这样的课程应该有什么范围?我应该留给它@Dependent
还是最好的方法?我读过CDI
Singleton对此有好处的地方,但我真的不知道为什么。
这个线程是我在该主题上唯一能找到的线程。由于我没有找到完全令人满意的答案,因此我进行了一个小实验,在该实验中,我一次声明了包含@Produces
带有@ApplicationScoped
注释的方法的类,而一次没有该方法的类。我在私有构造函数中跟踪了生产者类实例的构造。
我发现在使用注释生产者类的情况下@ApplicationScoped
,仅创建了一个实例,这是显而易见的。但是没有注释,每当@Produces
调用该方法时都会创建一个新实例,这是由于创建了注入的生产类型的bean实例所致。
因此,使生产者类@ApplicationScoped
减少(不需要)对象创建可能有一点意义。但是由于对象创建如今被认为是如此便宜,因此仅当生产者类至少具有一些要初始化的状态时,这才可能相关。
归档时间: |
|
查看次数: |
3608 次 |
最近记录: |