起源
最近使用IDEA
寫代碼時候,IDEA
總是會提示不推薦使用字段注入,然后今日看到一篇文章恰好講這個,故此記錄下。
我對閱讀的文章拿思維導圖做了個總結,內容如下:
注入方式
構造器注入
Before Spring 4.3, we had to add an annotation to the constructor. With newer versions, this is optional if the class has only one constructor.
Spring4.3版本以前必須手動在構造器上寫注解,之后版本如果只有一個構造器可以缺省。
#構造器注入
@Component
class Cake {
private Flavor flavor;
Cake(Flavor flavor) {
//注入時可校驗
Objects.requireNonNull(flavor);
this.flavor = flavor;
}
Flavor getFlavor() {
return flavor;
}
...
}
setter注入
@Component
class Cookie {
private Topping toppings;
@Autowired
void setTopping(Topping toppings) {
this.toppings = toppings;
}
Topping getTopping() {
return toppings;
}
...
}
字段注入
//實際項目中用的最多,但是idea最近開始提示不推薦。
@Component
class IceCream {
@Autowired
private Topping toppings;
Topping getToppings() {
return toppings;
}
void setToppings(Topping toppings) {
this.toppings = toppings;
}
}
總結
實際項目開發中,我經常會遇到第二個問題。依靠字段注入,然后引入了很多屬性。如果這種方式切換到構造器注入,明顯參數過長,典型的代碼異味。所以我對文章作者提出的觀點是認同的。