使用CDI注入bean时:
@Inject Person person;
是否需要/推荐使用setter和getter?
import javax.inject.Inject;
import javax.inject.Named;
@Named
@SessionScoped
public class myJSFBean{
@Inject Person person;
public void setPerson (Person person){
this.person = person;
}
public Person getPerson (){
return person;
}
我找到了这个文档,但我不明白这意味着什么: http://docs.oracle.com/javaee/6/tutorial/doc/gjbbp.html
答案 0 :(得分:4)
请注意,没有必要创建getter或setter方法将一个bean注入另一个bean。 CDI可以直接访问注入的字段(即使它是私有的!),这有时可以帮助消除一些浪费的代码。该字段的名称是任意的。这是确定注入内容的字段类型。
答案 1 :(得分:2)
CDI (容器依赖注入)可以针对不同的注入点:字段,构造函数和setter < /强>
所以简短的回答是不,如果你不能将它作为注入点使用它,则不需要 setter 方法。
getter 也可以被忽略,除非您需要一个访问字段状态(根据经验在 CDI 环境中没有太多意义,同一个字段已经由容器注入的仍然可以通过它在其他组件中访问。)
答案 2 :(得分:0)
我什至会认为吸气剂有害。
由于封装原理,默认情况下,大多数IDE和上面的示例中,getter和setter都是 public 。这意味着您使用CDI注入污染了自动完成功能。这些在您的课堂之外不应该看到。
如果您通过@ApplicationScoped
bean中的getter访问@RequestScoped
,则将始终不必要地实例化请求范围的bean,这会降低性能。 CDI bean应该始终注入到需要它们的地方,并且不能跨bean访问。您将阻止CDI正确处理您的范围。
所以实际上只剩下一个 private 吸气剂,无论如何它都是多余的,因为您不必在返回cdi bean之前就对其进行修改。