基于Spring Boot构造函数的依赖注入不起作用

时间:2017-06-10 09:23:18

标签: java spring spring-boot dependency-injection

我使用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的基于构造函数的依赖注入按预期工作。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

如果你想通过构造函数连接两个依赖项 - 你必须将它们声明为构造函数参数,所以在这里你必须声明:

public ParameterDateController(ParameterDate parameterDate, ParameterDateService parameterDateService) {
    this.parameterDate = parameterDate;
    this.parameterDateService = parameterDateService;
}

这里有关于构造函数注入的a good answer