我看到它的方式,有三种方法来获得到另一个bean的引用:获取对其他托管bean的引用的惯用方法是什么?
- 使用CDI,我可以
@Inject
一个叫豆。这有缺点,即CDI注释不能与脸部注释混合,因此我不能再使用@ViewScoped
。 - 使用
@ManagedProperty
似乎是理想的,除了我必须介绍一个公共setter的工作,这伤害封装。 我可以使用这样的事情(在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的回答。 – Bozho