加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – JSF2 ApplicationScope bean实例化时间?

发布时间:2020-12-14 05:51:00 所属栏目:Java 来源:网络整理
导读:在我看来,@ ApplicationScoped bean仅在第一次使用EL访问页面时启动. 当我查询ApplicationMap时,是否会创建@ApplicationScoped bean? ExternalContext ec = currentInstance.getExternalContext(); result = ec.getApplicationMap().get(beanName); 如何在
在我看来,@ ApplicationScoped bean仅在第一次使用EL访问页面时启动.

当我查询ApplicationMap时,是否会创建@ApplicationScoped bean?

ExternalContext ec = currentInstance.getExternalContext(); result =
    ec.getApplicationMap().get(beanName);

如何在加载XHTML页面之前触发应用程序作用域bean的实例化?

解决方法

您可以在 @ManagedBean声明中使用eager = true.
@ManagedBean(eager=true)
@ApplicationScoped
public class Config {

    // ...

}

这样bean将在webapp的启动时自动处理.

除此之外,您还可以使用Application#evaluateExpressionGet()以编程方式评估EL,以便在必要时自动创建bean.另请参阅this answer上的示例.

FacesContext context = FacesContext.getCurrentInstance();
Confic config = (Config) context.getApplication().evaluateExpressionGet(context,"#{config}",Config.class);
// ...

您也可以将它作为您需要它的bean的@ManagedProperty注入.

@ManagedBean
@RequestScoped
public class Register {

    @ManagedProperty("#{config}")
    private Config config;

    @PostConstruct
    public void init() {
        // ...
    }

    // ...
}

在注入父bean之前,JSF将自动创建它.它可以在@PostConstruct之外的所有方法中使用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读