代码之家  ›  专栏  ›  技术社区  ›  raoulsson

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

  •  2
  • raoulsson  · 技术社区  · 15 年前

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

    使用它的类配置如下:

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

    AsyncServiceManager 每次使用时都会实例化。正如我用scope APPLICATION注释的类,情况不应该如此。我需要这个班成为单身汉。

    2 回复  |  直到 11 年前
        1
  •  1
  •   Walter White Walter White    15 年前

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

    @In("#{asyncServiceManager}")
    

    相反,由于变量名与组件名相同,这就足够了

    @In
    private AsyncServiceManager asyncServiceManager;
    

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

        2
  •  0
  •   Arthur Ronald    15 年前

    《Seam in Action》一书中说:

    任何标记为应用程序作用域启动组件的组件(即,同时使用@startup和@Scope进行注释(ScopeType.APPLICATION应用程序)) 此时由Seam自动实例化 .

    我认为应该删除注释@AutoCreate。

    当做,