[英]JSF2 ApplicationScope bean instantiation time?
在我看來,@ @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。 另請參閱此答案的示例。
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
之外的所有方法中使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.