java – JSF2 ApplicationScope bean实例化时间?

前端之家收集整理的这篇文章主要介绍了java – JSF2 ApplicationScope bean实例化时间?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我看来,@ ApplicationScoped bean仅在第一次使用EL访问页面时启动.

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

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

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

解决方法

@H_404_11@ 您可以在 @ManagedBean声明中使用eager = true.
  1. @ManagedBean(eager=true)
  2. @ApplicationScoped
  3. public class Config {
  4.  
  5. // ...
  6.  
  7. }

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

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

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

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

  1. @ManagedBean
  2. @RequestScoped
  3. public class Register {
  4.  
  5. @ManagedProperty("#{config}")
  6. private Config config;
  7.  
  8. @PostConstruct
  9. public void init() {
  10. // ...
  11. }
  12.  
  13. // ...
  14. }

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

猜你在找的Java相关文章