CDI注入的bean需要getter和setter吗?

时间:2017-07-13 10:28:52

标签: java dependency-injection cdi inject

使用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

3 个答案:

答案 0 :(得分:4)

根据Weld Documentation

  

请注意,没有必要创建getter或setter方法将一个bean注入另一个bean。 CDI可以直接访问注入的字段(即使它是私有的!),这有时可以帮助消除一些浪费的代码。该字段的名称是任意的。这是确定注入内容的字段类型。

答案 1 :(得分:2)

Java EE 6应用程序中的

CDI 容器依赖注入)可以针对不同的注入点:字段,构造函数和setter < /强>

所以简短的回答是,如果你不能将它作为注入点使用它,则不需要 setter 方法。

getter 也可以被忽略,除非您需要一个访问字段状态(根据经验在 CDI 环境中没有太多意义,同一个字段已经由容器注入的仍然可以通过它在其他组件中访问。)

答案 2 :(得分:0)

我什至会认为吸气剂有害。

由于封装原理,默认情况下,大多数IDE和上面的示例中,getter和setter都是 public 。这意味着您使用CDI注入污染了自动完成功能。这些在您的课堂之外不应该看到。

如果您通过@ApplicationScoped bean中的getter访问@RequestScoped,则将始终不必要地实例化请求范围的bean,这会降低性能。 CDI bean应该始终注入到需要它们的地方,并且不能跨bean访问。您将阻止CDI正确处理您的范围。

所以实际上只剩下一个 private 吸气剂,无论如何它都是多余的,因为您不必在返回cdi bean之前就对其进行修改。