我是Spring Boot和Dependency Injection的初学者,我无法在Spring Boot中了解基于构造函数的依赖注入。我有一个名为ParameterDate
的课程,如下所示:
public class ParameterDate {
private Date parameterDateUnadjusted;
private Date parameterDateAdjusted;
private Date parameterDateAdded;
private Date parameterDateChanged;
}
我有另一个课我想使用ParameterDate
。通常我会用
@Autowired
ParameterDate parameterDate;
如果需要,我只需使用parameterDate
。
如何使用基于构造函数的注入执行此操作?
答案 0 :(得分:6)
public MyClazzRequiringParameterDate(ParameterDate parameterDate){
this.parameterDate = parameterDate;
}
由于Boot 1.4 @Autowired
在构造函数上是可选的。如果您想明确构造函数,可以使用@Autowired
标记构造函数。
一般来说,你应该支持Constructor> Setter>现场注射。直接注入到字段中会忽略DI的点,这也意味着您的测试依赖于Spring来注入依赖项,而不仅仅是能够将模拟或存根直接传递给它。 Jurgan Holler表示,如果可能的话,他会删除现场注射。
答案 1 :(得分:1)
@Component
public class ParameterDate {
private Date parameterDate;
@Autowired
public ParameterDate(Date parameterDate){
this.parameterDate = parameterDate;
}
}
以上是构造函数注入的示例。
请注意,您也可以在属性的setter方法上使用@Autowired注释,并且由于setter方法(当然是它的目的,它所包含的逻辑除外)与任何其他方法之间没有区别,因此可以在大约该类的任何方法。 由于自动装配和组件扫描是并驾齐驱的,因此您应该使用@Component批注标记您的类。这告诉Spring应该为该类创建一个bean。