以应用程序启动的 CDI bean

CDI bean that starts with the application

有什么方法可以用应用程序启动 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>

尝试:

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

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

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

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

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