java - 依赖注入的区别
问题描述
我有一个关于 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;
}
解决方案
两者之间没有区别,因为它们只有一个构造函数。@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
。