【问题标题】:CDI bean that starts with the application以应用程序开头的 CDI bean
【发布时间】:2018-08-17 19:19:27
【问题描述】:

有什么方法可以用应用程序启动 CDI Bean?

我有这个豆子:

@ApplicationScoped
@Named
public class MyBean implements Serializable {

    @Inject
    private Helper helper;

    @PostConstruct
    public void init() {
        helper.doThings();
    }

}

我希望这个 bean 在部署时从应用程序开始。

我正在使用weld-servlet 和tomcat7:

<dependency>
    <groupId>org.jboss.weld.servlet</groupId>
    <artifactId>weld-servlet</artifactId>
    <version>${weld-servlet.version}</version>
    <scope>compile</scope>
</dependency>

【问题讨论】:

    标签: java tomcat cdi


    【解决方案1】:

    试试:

    public void startup(@Observes @Initialized 
    (ApplicationScoped.class) Object context){
        //your code here
    }
    

    这将确保该方法在启动时执行,并启动您的 bean。

    或者您可以使用 OmniFaces @Eager 注释。

    【讨论】:

    • @Henrique Santiago 用它替换代码中带有 @PostConstruct 注释的方法。
    【解决方案2】:

    确保您的 tomcat7 变体支持 CDI(请参阅 tomcat version comparison) 那么,

    @Startup
    @Singleton
    public class MyBean {
        @PostConstruct
        private void init() {
            // place your initialization code here
        }
    }
    

    【讨论】:

    • 这是错误的,@Singleton 是 EJB 注释,而不是 CDI。因此,它不会只使用 servlet。
    • 如果你查看我分享的tomcat版本对比url,你会发现我的回答是准确的。
    猜你喜欢
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多