gpt4 book ai didi

java - Spring 框架中的构造函数依赖注入(inject)

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:39:57 24 4
gpt4 key购买 nike

据我所知,构造函数注入(inject)强制执行强制依赖,setter 注入(inject)允许可选依赖,但是...

那么这种方法不可能吗???

@Component
public class Car {

@Autowired(required=false)
public Car(Engine engine, Transmission transmission) {
this.engine = engine;
this.transmission = transmission;
}
}

最佳答案

如果没有找到给定类型的 bean,您的方法将不起作用,因为 Spring 不会注入(inject) null。如果您在 setter 方法上设置了 @Autowired(required=false),如果没有这样的 bean,则不会调用此 setter。使用构造函数是不可能的。

对于 Spring 版本 4.1+,您可以使用 Java 8 Optional用于声明可选依赖项:

@Component
public class Car {

@Autowired
public Car(Engine engine, Optional<Transmission> transmission) {
this.engine = engine;
this.transmission = transmission.orElse(null);
}
}

在这种情况下,Spring 将理解 Engine 是必需的,而 Transmission 是可选的。因此,如果未找到 Transmission 类型的 bean,则注入(inject) Optional.empty()

关于java - Spring 框架中的构造函数依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43232436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com