2017-04-07 57 views
0

这是一个很好的练习问题......在抽象父类中注入常用的CDI beans

我们将JSF托管bean转换为JSF 2.2中的CDI bean。在做这件事的时候,似乎在很多豆子中,我们需要一些会话bean。

我们最初打算@Inject这些,但也可将其注入在父“FacesBean”类保护的变量。

  1. 这会是很好的做法?
  2. 不@Inject也是在尚未转换为CDI @ManagedBean类工作?

回答

0

于是一个接一个:

1)好的做法呢?

如果你有一个类层次结构,我建议你@Inject成在父私人字段,然后创建一个最小能见度需要(可能保护)getter方法。只要坚持围绕Java封装的一般良好实践规则即可。

2)@ManagedBean@Inject

只要你使用bean发现模式all(使用空beans.xml),你的类将被自动拾取作为托管豆 - 包括那些@ManagedBean注解。一旦它是一个豆,注射就起作用。所以是的,只要这个类可以自动成为一个bean(例如,它不是@Vetoed或不可处理的等等),注入将会工作。

+0

事情是,用一个getter声明一个私有注入变量,为开发人员敞开大门。仍然在子类中再次注入相同的变量。我们接着注射两次吗? –

+0

嗯,我没有看到如何注入一个受保护的领域,防止开发人员做出完全相同的错误 - 但如果你觉得它更好,去做它,它应该工作。为了回答上面的问题,你会有两个注入点,因此是的,你会注入两次(但除非它是'@ Dependent',你实际上只会注入一个代理对象,指向相同的bean底层实例* )。 – Siliarus