Spring依赖注入还是默认值?
Spring dependency inection or default value?
我有一个 class Car
它有一个依赖关系:Motor
我的classCar
是这样的:
@Component
public class Car {
private Motor motor;
@Autowired
public Car(Motor motor) {
this.motor = motor;
}
public Car() {
this.motor = new Motor("created by Car");
}
我不确定 Spring 如何管理要执行的操作:使用 default/no-args 构造函数或构造函数注入依赖项?应使用哪个电机实例?
spring 默认情况下始终调用无参数构造函数确保将 motar 注释为 Component
基于 Autowired 文档,
The constructor with the greatest number of dependencies that can be satisfied by matching beans in the Spring container will be chosen. If none of the candidates can be satisfied, then a primary/default constructor (if present) will be used.
意思是,在你的情况下,如果 Spring 引导容器在引导期间找到 Motor
的 bean(可能是通过 @Configuraton
或 @Component
等,)那么你的 Car
bean 将使用基于 DI 的构造函数进行实例化,在这种情况下,默认构造函数将不会用于创建 Car
bean。
如果在创建 Car
bean 期间没有可用的 Motor
bean,则使用默认构造函数。
我有一个 class Car
它有一个依赖关系:Motor
我的classCar
是这样的:
@Component
public class Car {
private Motor motor;
@Autowired
public Car(Motor motor) {
this.motor = motor;
}
public Car() {
this.motor = new Motor("created by Car");
}
我不确定 Spring 如何管理要执行的操作:使用 default/no-args 构造函数或构造函数注入依赖项?应使用哪个电机实例?
spring 默认情况下始终调用无参数构造函数确保将 motar 注释为 Component
基于 Autowired 文档,
The constructor with the greatest number of dependencies that can be satisfied by matching beans in the Spring container will be chosen. If none of the candidates can be satisfied, then a primary/default constructor (if present) will be used.
意思是,在你的情况下,如果 Spring 引导容器在引导期间找到 Motor
的 bean(可能是通过 @Configuraton
或 @Component
等,)那么你的 Car
bean 将使用基于 DI 的构造函数进行实例化,在这种情况下,默认构造函数将不会用于创建 Car
bean。
如果在创建 Car
bean 期间没有可用的 Motor
bean,则使用默认构造函数。