【问题标题】:Execute code at CDI startup在 CDI 启动时执行代码
【发布时间】:2014-05-13 09:45:35
【问题描述】:

有没有一种简单的方法可以在 CDI 启动后立即执行代码?

实际上我有一个 @ApplicationScopped bean,我想在 CDI 引导后立即实例化它,有没有简单的方法可以做到这一点?

【问题讨论】:

    标签: java cdi bootstrapping


    【解决方案1】:

    有很多解决方案,但对我来说,只有两个不觉得很老套。我不确定 Java EE 7 是否以某种方式解决了这个问题,当我用谷歌搜索时找不到任何东西。

    1. 使用来自 EJB 的 @Startup。如果您可以使用 EJB,这是最好的
    2. 使用来自 deltaspike 的 Servlet 模块和@Observes @Initialized ServletContext context

    http://deltaspike.apache.org/servlet.html

    【讨论】:

    • 感谢您的回答。但是我不在 EJB 环境中,我只在简单的 Tomcat 中使用 Weld 提供 CDI ......我会尝试 DeltaSpike 的解决方案,但我有点害怕它添加的层(可能不正确)。
    • 嗨,Deltaspike 是由 Weld 和 OWB(以及其他人)的人开发的,它不应被视为额外的层。相反,它提供了更多的 CDI 功能。
    【解决方案2】:

    来自this blog post

    最近才使用 CDI 1.1 版本; 2013 年 5 月(Java EE 7);当容器准备好时,您有可能收到 CDI 事件。

    public class CDIStartup {
        public void postConstruct(@Observes @Initialized(ApplicationScoped.class) Object o) {
            // CDI Ready    
        }
    }
    

    【讨论】:

    • 请注意,这是启动时的同步调用。在部署被视为已部署之前,它需要完全完成
    猜你喜欢
    • 2015-07-31
    • 2011-10-11
    • 2015-05-07
    • 1970-01-01
    • 2015-02-22
    • 2012-02-07
    • 2017-12-01
    • 1970-01-01
    相关资源
    最近更新 更多