首页 > 解决方案 > 依赖注入的区别

问题描述

我有一个关于 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;
}

标签: javaspringdependency-injection

解决方案


两者之间没有区别,因为它们只有一个构造函数。@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构造函数来初始化默认值,那么将选择无参数构造函数。因此,在上述情况下,如果您省略@Autowired,则 for 的值obj将设置为null


推荐阅读