簡體   English   中英

Spring框架中的構造函數依賴注入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM