同时执行 setter 和构造函数注入

Performing both setter and constructor injection

我是 spring 框架的新手。我尝试使用两种注入方法(Setter 和构造函数)注入依赖项。我期待在 setter 注入中定义的输出,因为它被构造函数注入覆盖了。但是,我收到了类似

的错误消息

Bean creation exception:No default constructor found

如果我们同时应用这两种注入方式,会不会报错?

I tried to inject dependency with both the injection methods(Setter and constructor).

你应该可以做到。根据 Spring 版本,结果可能会有所不同,但我可以确认它适用于 Spring 5 版本。

你的错误:

Bean creation exception:No default constructor found.

认为带有参数的构造函数不被 Spring 视为自动装配 bean 的一种方式。
在旧的 Spring 版本中(3 和更少,也许 4 我不记得了),你必须在构造函数中指定 @Autowired 以使 Spring 知道它。
所以你应该声明:

@Autowired
public void setMyDep(MyDep myDep) {
    this.myDep = myDep;
}

@Autowired
public FooBean(MyOtherDep myOtherDep) {
    this.myOtherDep = myOtherDep;
}

在最近的 Spring 版本中,不再需要声明 @Autowired :

@Autowired
public void setMyDep(MyDep myDep) {
    this.myDep = myDep;
}

public FooBean(MyOtherDep myOtherDep) {
    this.myOtherDep = myOtherDep;
}