什么是应用范围 Bean?我理解它是一个将在应用程序的生命周期中存在的 bean,但这似乎不是正确的解释。我有一个应用程序,它在启动时创建一个应用程序范围的 bean(eager=true),然后是一个会话 bean,它尝试访问应用程序范围 bean 的对象(也是应用程序范围的对象)。但是当我尝试从会话范围的 bean 访问应用程序范围的 bean 时,我得到一个空指针异常。以下是我的代码的摘录:
应用范围 Bean:
@ManagedBean(eager=true)
@ApplicationScoped
public class Bean1 implements Serializable{
private static final long serialVersionUID = 12345L;
protected ArrayList<App> apps;
// construct apps so they are available for the session scoped bean
// do time consuming stuff...
// getters + setters
会话范围 Bean:
@ManagedBean
@SessionScoped
public class Bean2 implements Serializable{
private static final long serialVersionUID = 123L;
@Inject
private Bean1 bean1;
private ArrayList<App> apps = bean1.getApps(); // null pointer exception
似乎正在发生的事情是,Bean1 被创建,它是什么东西,然后在 Bean2 可以访问它之前被销毁。我希望使用 application scoped 会保留 Bean1 直到容器关闭或应用程序被杀死,但情况似乎并非如此。