@Autowired注解的幾種方式 --依賴注入


*@Autowired注入成員變量,利用field反射注入,要等類加載完了才注入bean;@Autowired注入構造方法中,利用構造器注入,有先后依賴關系;setter屬性注入,setter代碼冗長,不能將屬性設置為final。

private A a;

    @Autowired
    public c(A a) {
        this.a= a;
    }

@Autowired
private A a;

1、@autowired寫在變量上的注入要等到類完全加載完,才會將相應的bean注入。

寫在方法上是為了在構造方法中使用到該變量。寫到構造方法中,也就是有了先后的注入依賴關系。

2、第一個是通過構造器注入,  第二個是通過field反射注入
弊端

如果你使用的是構造器注入
恭喜你,當你有十幾個甚至更多對象需要注入時,你的構造函數的參數個數可能會長到無法想像。

如果你使用的是field反射注入
如果不使用Spring框架,這個屬性只能通過反射注入,太麻煩了!這根本不符合JavaBean規范。
還有,當你不是用過Spring創建的對象時,還可能引起NullPointerException。
並且,你不能用final修飾這個屬性。

如果你使用的是setter方法注入
那么你將不能將屬性設置為final。

兩者取其輕

Spring3.0官方文檔建議使用setter注入覆蓋構造器注入。
Spring4.0官方文檔建議使用構造器注入。

結論

如果注入的屬性是必選的屬性,則通過構造器注入。
如果注入的屬性是可選的屬性,則通過setter方法注入。
至於field注入,不建議使用。

3、一般用的是模型驅動,當模型不夠時,用屬性驅動,屬性驅動也就是這個setter注入,一般還是用
@Autowired
private A abc;

    
    public setAbc(A a) {
        this.a= a;
    }
結合模型驅動用。
記住八字真言:“模型不夠,屬性來湊”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM