应用程序范围内的Seam组件的许多实例

时间:2009-12-23 10:42:58

标签: java seam

我有一个这样注释的Seam组件:

@AutoCreate
@Name("asyncServiceManager")
@Scope(ScopeType.APPLICATION)
public class AsyncServiceManager {

使用它的类配置如下:

@In("#{asyncServiceManager}")
private AsyncServiceManager asyncServiceManager;

运行代码时,我发现类AsyncServiceManager每次使用时都会被实例化。当我用范围APPLICATION注释类时,情况应该不是这样。我需要这个班级成为单身人士。

2 个答案:

答案 0 :(得分:1)

此外,您可以简单地进行配置。你不需要这个:

@In("#{asyncServiceManager}")

相反,由于您的变量名称与组件名称相同,因此这是足够的

@In
private AsyncServiceManager asyncServiceManager;

根据组件的使用频率(这是一种优化),您可以将其设置为事件范围的组件,在观察事件时自动创建组件,然后在此之后将其销毁。

沃尔特

答案 1 :(得分:0)

Seam in Action书中说:

  

标记为应用程序范围的启动组件的任何组件(即,同时注释@Startup和@Scope(ScopeType.APPLICATION))将由Seam自动实例化

所以我认为应删除@AutoCreate注释。

Seam使用SeamListener来引导标记组件的@Scope(ScopeType.APPLICATION)。

的问候,