![](/img/trans.png)
[英]Using CDI (Context & Dependency Injection) backing beans instead of Managed Beans
[英]CDI beans injection
这是在@SessionScoped
bean中注入@ApplicationScoped
bean的正确方法吗? 这会导致我的应用程序范围的bean被存储在每个用户的会话中吗?
我有一个应用程序范围的Bean,其中包含我们在所有系统用户之间共享的一些值,现在我需要在会话Bean的方法中获取这些值。
像您提供的示例一样,在JSF或CDI Bean中将相同或更大范围的Bean注入另一个Bean中是完全合法和正确的。
CDI bean和JSF托管bean之间的区别在于,当您尝试在另一个bean中注入范围较窄的bean(例如,将@RequestScoped
bean注入@SessionScoped
一个)时,只有在使用CDI @Named
才有可能@Named
bean,但是在使用JSF @ManagedBean
时无法@Named
。
CDI bean之所以可以做到这一点,与它们的Proxy Pattern机制有关,与JSF机制相比(它基于调用设置程序以便直接注入物理实例)比JSF机制更灵活。
这种代理机制允许CDI容器将引用传递给代理,而不是传递注入的Bean(除非Bean具有默认范围@Dependent
)。 因此,该代理将负责处理对注入的bean的所有调用,并将它们转发/重定向到正确的bean实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.