基于Spring Boot Constructor的依赖注入

时间:2017-06-04 17:16:02

标签: spring spring-boot dependency-injection

我是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

如何使用基于构造函数的注入执行此操作?

2 个答案:

答案 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。