Java – jsf2 applicationscope bean instantiation time?

In my opinion, the @ applicationscope bean starts only the first time you use el to access a page

Will the @ applicationscope bean be created when I query the applicationmap?

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

How to trigger instantiation of application scope beans before loading XHTML pages?

Solution

You can use eager = true in the @ managedbean declaration

@ManagedBean(eager=true)
@ApplicationScoped
public class Config {

    // ...

}

In this way, the bean will be processed automatically when webapp starts

In addition, you can use application #evaluateexpressionget() to programmatically evaluate el to automatically create beans if necessary See also the example on this answer

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

You can also inject it as the @ managedproperty of the bean you need it for

@ManagedBean
@RequestScoped
public class Register {

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

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

    // ...
}

JSF will automatically create the parent bean before injecting it It can be used in all methods except @ postconstruct

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>