我有一个这样注释的Seam组件:
@AutoCreate
@Name("asyncServiceManager")
@Scope(ScopeType.APPLICATION)
public class AsyncServiceManager {
使用它的类配置如下:
@In("#{asyncServiceManager}")
private AsyncServiceManager asyncServiceManager;
运行代码时,我发现类AsyncServiceManager
每次使用时都会被实例化。当我用范围APPLICATION注释类时,情况应该不是这样。我需要这个班级成为单身人士。
答案 0 :(得分:1)
此外,您可以简单地进行配置。你不需要这个:
@In("#{asyncServiceManager}")
相反,由于您的变量名称与组件名称相同,因此这是足够的
@In
private AsyncServiceManager asyncServiceManager;
根据组件的使用频率(这是一种优化),您可以将其设置为事件范围的组件,在观察事件时自动创建组件,然后在此之后将其销毁。
沃尔特
答案 1 :(得分:0)
Seam in Action书中说:
标记为应用程序范围的启动组件的任何组件(即,同时注释@Startup和@Scope(ScopeType.APPLICATION))将由Seam自动实例化。
所以我认为应删除@AutoCreate注释。
Seam使用SeamListener来引导标记组件的@Scope(ScopeType.APPLICATION)。
的问候,