mar*_*bjo 12 jsf cdi managed-bean
好的,所以我有一个JSF支持bean需要引用另一个(@NoneScoped)bean.
我应该@Inject它还是使用@ManagedProperty从容器中获取实例引用?
为什么要使用一个而不是另一个,在我看来,这两种方法实现了同样的目的.
@ManagedProperty并且@NoneScoped来自JSF 2.0规范,同时@Inject来自CDI规范.
如果您只是在处理一个不使用任何其他JavaEE 6功能的servlet应用程序,那么请继续@ManagedProperty.该注释还具有以下优势@Inject:您可以使用EL(表达式语言)(虽然有一些解决方法可以在CDI中获得).
注释/容器似乎都实现了" 相同的东西 ",但是以不同的方式实现,并且它们使用不同的容器.由CDI管理的Bean将可供JSF使用,但不能反过来.如果您使用JSF特定注释注释您的bean,那么忘记使用自定义限定符,拦截器,生成器方法等.我通常更喜欢使用CDI的方法,因为最后它更复杂但是选择将取决于您的实际需求.
把它包装起来,因为看起来你只是使用JSF功能然后坚持@ManagedProperty(CDI无法理解@NoneScoped注释,在CDI中,@Default如果没有指定,所有bean都在范围内).切换到CDI在您的项目可能意味着更换不只是@ManagedProperty为@Inject一个,但所有的@RequestScoped(等)的特定CDI-的.
我会尽可能支持CDI而不是托管bean.CDI在部署时依赖性检查方面更丰富,其代理支持可防止范围泄漏.这样可以更轻松地验证模型的正确性.生产者通常可用于在必要时提供胶水代码.
| 归档时间: |
|
| 查看次数: |
8191 次 |
| 最近记录: |