我使用Spring Boot开发REST服务。在其中一个REST控制器中,我有一个基于字段的依赖注入,我喜欢更改为基于构造函数的依赖注入。我对依赖注入的设置目前看起来像这样:
@RestController
public class ParameterDateController {
private ParameterDateController() {
}
private ParameterDate parameterDate;
private ParameterDateController(ParameterDate parameterDate) {
this.parameterDate = parameterDate;
}
@Autowired
private ParameterDateService parameterDateService;
// here are the metods of the endpoints
}
使用此设置一切正常。我想把ParameterDateService
更改为基于构造函数,我尝试了这个:
@RestController
public class ParameterDateController {
private ParameterDateController() {
}
private ParameterDate parameterDate;
private ParameterDateController(ParameterDate parameterDate) {
this.parameterDate = parameterDate;
}
private ParameterDateService parameterDateService;
private ParameterDateController(ParameterDateService parameterDateService) {
this.parameterDateService = parameterDateService;
}
// here are the metods of the endpoints
}
在更改为基于构造函数的依赖项注入后,当我尝试注入像NullPointerException
这样的依赖项时,我得到parameterDateService.postParameterDate(parameterDate);
。当我将它设置为基于字段的依赖注入并且不提供NullPointerException
时,我以相同的方式注入。 ParameterDate
的基于构造函数的依赖注入按预期工作。
我做错了什么?
答案 0 :(得分:0)
如果你想通过构造函数连接两个依赖项 - 你必须将它们声明为构造函数参数,所以在这里你必须声明:
public ParameterDateController(ParameterDate parameterDate, ParameterDateService parameterDateService) {
this.parameterDate = parameterDate;
this.parameterDateService = parameterDateService;
}
这里有关于构造函数注入的a good answer。