区别在于那种依赖注入

时间:2020-05-20 12:53:02

标签: java spring dependency-injection

我有一个关于Spring依赖注入的快速问题。我有两个虚拟类,它们都使用一点不同的方法,在这里提出了问题。哪个更好?为什么?

FIRST APPROACH
public class ClassName {
   private final Object obj;

   public ClassName(Object obj){
      this.obj = obj;
}

SECOND APPROACH
public class ClassName {
   private Object obj;

   @Autowired
   public ClassName(Object obj){
       this.obj = obj;
}

1 个答案:

答案 0 :(得分:1)

两者之间没有区别,因为它们只有一个构造函数。唯一的情况是,在具有多个构造函数的情况下进行依赖项注入时,应在构造函数上使用@Autowired。例如:

@Component
public class ClassName {
    final Object obj;

    public ClassName() {
        this.obj = null; // null or something else
    }

    @Autowired
    public ClassName(Object obj) {
        this.obj = obj;
    }
}

如果您不打算在构造函数上使用@Autowired,则打算使用默认参数初始化默认值,那么将选择no-arg构造函数。因此,在上述情况下,如果省略@Autowired,则obj的值将设置为null

相关问题