繁体   English   中英

CDI豆注射液

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM