[英]Constructor Dependency Injection using Spring framework, unable to retain the value
[英]Constructor Dependency Injection in Spring Framework
據我所知, 構造函數注入強制執行強制性依賴關系,而setter注入允許可選的依賴關系,但是……
那么這種方法不可能嗎?
@Component
public class Car {
@Autowired(required=false)
public Car(Engine engine, Transmission transmission) {
this.engine = engine;
this.transmission = transmission;
}
}
您的方法將不起作用,因為如果找不到指定類型的bean,Spring將不會注入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,則將Optional.empty()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.