【发布时间】:2011-06-28 11:40:48
【问题描述】:
在我看来,有三种方法可以获取对另一个 bean 的引用:
- 使用 CDI,我可以
@Inject命名 bean。这样做的缺点是 CDI 注释不能与面部注释很好地混合,因此我不能再使用@ViewScoped。 - 使用
@ManagedProperty似乎是理想的,除了我必须引入一个公共设置器才能使其工作,这会损害封装。 -
我可以使用这样的东西(在this answer 中提出):
@SuppressWarnings("unchecked") public static <T> T findBean(String beanName) { FacesContext context = FacesContext.getCurrentInstance(); return (T) context.getApplication().evaluateExpressionGet( context, "#{" + beanName + "}", Object.class); }我可以使用这种方法来初始化我的
@PostConstruct中的属性。这没有上述缺点,但似乎有点复杂。为什么我必须为框架应该提供的东西编写辅助方法?
我的问题是,我应该使用以上三个中的哪一个?此外,请随时纠正我在上述描述中可能提出的任何误解,或提出其他(更优雅的)方法来实现该目标。
【问题讨论】:
-
查看我的更新和 jan groth 的回答。