簡體   English   中英

彈簧塞注射保證

[英]Spring setter injection guarantee

將表單構造函數注入轉換為setter注入是否安全?

setter注入是否可以確保在使用時完全構造我的對象?

是的,這很安全。

使用構造函數注入 ,Spring將使用適當的參數調用構造函數(請注意,在這種情況下,您可以將final修飾符添加到依賴項字段中)。

樣品

private final SomeBean dependency;

public MyObject(SomeBean dependency){
    this.dependency = dependency;
    doInit();
}

private void doInit(){
    //doStuff to initialize your bean
}

使用setter注入 ,Spring將使用默認構造函數(即,沒有arg構造函數)實例化bean。 下一步是調用所有必需的setter,以便設置所有@Autowired依賴項。 最后,Spring將調用帶有@PostConstruct批注的方法。

樣品

@Autowired
private SomeBean dependency;

@PostConstruct
private void doInit(){
    //doStuff to initialize your bean
}

使用setter注入有一個優點:在bean之間存在循環依賴的情況下,Spring將能夠解決它們(因為它可以使用部分構建bean調用setter)。 (如果您的設置員是真正的設置員,並且除了向字段分配值外,還可以做其他事情就可以了)

另一方面,使用構造函數注入時,Spring無法解決循環依賴關系,這僅僅是因為部分構建的bean無法體面地用作構造函數參數。

我參加聚會有點晚了,但這是我的2分2分,

  • 在任何OO語言中, setter / field注入都是邪惡的
  • 最好是由於循環依賴注入而快速失敗,因為這是設計錯誤。 並且不注意它們可能會對您的后續行為產生不利影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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