JSF2 ApplicationScope bean实例化时间



在我看来,@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() {
        // ...
    }
    // ...
}

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

相关内容

  • 没有找到相关文章

最新更新