以应用程序开头的CDI bean

时间:2018-08-17 19:19:27

标签: java tomcat cdi

是否可以使用该应用程序启动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>

2 个答案:

答案 0 :(得分:3)

尝试:

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

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

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

答案 1 :(得分:0)

确保您的tomcat7变体支持CDI(请参见tomcat version comparison) 然后,

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