Spring DI 同时有两个构造函数

Bat*_*nov 4 java spring dependency-injection javabeans multiple-constructors

这是一种反模式,但我很好奇实际会发生什么。

如果显式定义一个无参数构造函数和一个带自动装配参数的构造函数,spring框架将如何初始化它?

@Service
class Clazz {

    private MyBean myBean;

    public Clazz(){}

    @Autowired
    public Clazz(MyBean myBean){
        this.myBean = myBean;
    }
}
Run Code Online (Sandbox Code Playgroud)

Oom*_*ity 8

除了上面的答案之外,如果有一个没有@autowire声明的构造函数,spring会使用相同的构造函数进行注入。

如果有多个构造函数,那么Spring使用@autowired的构造函数。

Spring文档中提到https://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/htmlsingle/#beans-autowired-annotation

从 Spring Framework 4.3 开始,如果目标 bean 一开始只定义一个构造函数,则不再需要在此类构造函数上添加 @Autowired 注释。但是,如果有多个构造函数可用,则必须至少对其中一个构造函数进行注释,以指导容器使用哪一个