欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Spring依賴注入的三種方式使用及優(yōu)缺點

 更新時間:2023年04月20日 10:37:56   作者:蠟筆小心眼子!  
這篇文章主要介紹了spring依賴注入的三種方式的使用方法,以及優(yōu)缺點的介紹,通過代碼示例介紹的非常詳細,感興趣的小伙伴可以參考一下

前置說明:這里的代碼演示都是在UserController類里面使用UserService類,然后通過啟動類調(diào)用UserController類,觀察在UserController中是否通過三種依賴注入的方式獲取到UserService對象,UserService代碼及啟動類(App)代碼如下:

@Service
public class UserService {
    public void sayHi() {
        System.out.println("do userService sayHi()");
    }
}
public class App {
    public static void main(String[] args) {
        //1.獲取 Spring 上下文對象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //2.獲取 Bean 對象
        UserController userController = context.getBean("userController", UserController.class);
        //3.使用 Bean 對象
        userController.sayHi();
    }
}

一,屬性注入

1,屬性注入的使用

屬性注入針對于屬性,將需要注入的Bean對象(這里是UserService)加上@Autowired注解(該單詞的意思為自動注入),此時就可以將該對象從Spring容器中取出(前提必須加上五大類注解,否則Spring容器中不會有這個對象)

 2,屬性注入的優(yōu)缺點

優(yōu)點:

屬性注入只需要在屬性上面加一個@AutoWired注解,寫法簡便,可讀性高,易維護(絕大部分實際開發(fā)中使用的都是屬性注入的方式)

缺點:

  • 不能注入final類修飾的屬性;

  •  屬性注入兼容度差,只能在IoC容器中才能使用(類與IoC容器高度耦合),使用其他框架時不能使用屬性注入;
  • 屬性注入容器違背單一職責原則(單一職責原則:一個類最好只能做一件事,功能最好是單一的,在屬性注入這里指的就是一個類最好只注入一個屬性),因為屬性注入簡單方便的優(yōu)勢,開發(fā)者在開發(fā)的過程中就容易濫用屬性注入,導致一個類中注入多個對象.

二,Setter注入

1,setter注入的使用

Setter注入就是使用Java的setter方法配合注解將Bean注入到當前類中;

 Setter注入針對于setter方法,通過方法將Bean對象從Spring中獲取到并進行賦值(前提必須加上五大類注解,否則Spring容器中不會有這個對象)

2,Setter注入的優(yōu)缺點

優(yōu)點:

Setter注入滿足單一設(shè)計職責原則:因為setter方法的特性就是一個setter方法只對應(yīng)一個對象,不會有注入多個對象的可能性;

 缺點:

  • 不能注入final修飾的對象;

  •  注入的對象可能會被修改:由于setter方法可以被多次調(diào)用,可能存在被修改的風險;

三,構(gòu)造方法注入

1,構(gòu)造方法的使用

構(gòu)造方法顧名思義針對于構(gòu)造方法,在構(gòu)造方法上面加上注解將Bean對象注入到當前類中(前提必須加上五大類注解,否則Spring容器中不會有這個對象)

2,構(gòu)造方法的特點(不同于其他兩種注入方式)

當類中只有一個吻構(gòu)造方法時可以省略@Autowired,當有多個構(gòu)造方法時不可以省略,否則會報錯(因為多個構(gòu)造方法時不知道默認給哪個構(gòu)造方法加注解);

 3,構(gòu)造方法注入的有優(yōu)缺點

優(yōu)點:

  • 能夠注入final修飾的對象;

  •  注入的對象不會被修改:因為構(gòu)造方法只會被執(zhí)行一次;
  • 構(gòu)造方法注入是完全初始化的:因為依賴注入是在構(gòu)造方法內(nèi)部執(zhí)行的,而構(gòu)造方法又是在類起初創(chuàng)建的時候就執(zhí)行的,所以會被完全初始化;
  • 通用性更好:構(gòu)造方法注入因為基于Java的,JDK是最底層框架,所以無論在哪一個框架都可以適用.

缺點:

  • 構(gòu)造方法可以注入多個對象,違背了單一設(shè)計原則(假設(shè)這里再添加一個StudentService對象觀察是否可以通過構(gòu)造方法注入):

  •  構(gòu)造方法的寫法較為麻煩.

四,final對象能否被注入的原因

Java規(guī)定被final修飾的屬性只能在兩個地方進行賦值:

  • 在定義的時候就進行賦值
  • 在構(gòu)造方法內(nèi)部進行賦值

屬性注入和Setter方法注入都沒有在定義的時候賦值(屬性注入沒有進行賦值,Setter方法注入是通過setter這個普通方法進行的賦值),構(gòu)造方法則是通過構(gòu)造方法進行了賦值,所以前兩個不能注入final修飾的類,后者可以!

以上就是詳解Spring依賴注入的三種方式使用及優(yōu)缺點的詳細內(nèi)容,更多關(guān)于pring依賴注入方式及優(yōu)缺點的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java中輸入輸出方式的簡單示例

    Java中輸入輸出方式的簡單示例

    Java語言的輸入輸出功能是十分強大而靈活的,美中不足的是看上去輸入輸出的代碼并不是很簡潔,因為你往往需要包裝許多不同的對象,下面這篇文章主要給大家介紹了關(guān)于Java中輸入輸出方式的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Java堆排序算法詳解

    Java堆排序算法詳解

    這篇文章主要為大家詳細介紹了Java堆排序算法的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 淺談collection標簽的oftype屬性能否為java.util.Map

    淺談collection標簽的oftype屬性能否為java.util.Map

    這篇文章主要介紹了collection標簽的oftype屬性能否為java.util.Map,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Spring?Boot源碼實現(xiàn)StopWatch優(yōu)雅統(tǒng)計耗時

    Spring?Boot源碼實現(xiàn)StopWatch優(yōu)雅統(tǒng)計耗時

    這篇文章主要為大家介紹了Spring?Boot源碼實現(xiàn)StopWatch優(yōu)雅統(tǒng)計耗時,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 學生視角看Java 面向?qū)ο蟮睦^承本質(zhì)

    學生視角看Java 面向?qū)ο蟮睦^承本質(zhì)

    繼承是java面向?qū)ο缶幊碳夹g(shù)的一塊基石,因為它允許創(chuàng)建分等級層次的類。繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為
    2022-03-03
  • 通過使用Byte?Buddy便捷創(chuàng)建Java?Agent

    通過使用Byte?Buddy便捷創(chuàng)建Java?Agent

    這篇文章主要為大家介紹了如何通過使用Byte?Buddy便捷創(chuàng)建Java?Agent的使用說明,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • springboot+vue實現(xiàn)Minio文件存儲的示例代碼

    springboot+vue實現(xiàn)Minio文件存儲的示例代碼

    本文主要介紹了springboot+vue實現(xiàn)Minio文件存儲的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • JVM回收跨代垃圾的方式詳解

    JVM回收跨代垃圾的方式詳解

    在Java堆內(nèi)存中,年輕代和老年代之間存在的對象相互引用,假設(shè)現(xiàn)在要進行一次新生代的YGC,但新生代中的對象可能被老年代所引用的,為了找到新生代中的存活對象,不得不遍歷整個老年代,這樣明顯效率很低下,那么如何快速識別并回收這種引用對象呢
    2024-02-02
  • Java集合快速失敗與安全失敗解析

    Java集合快速失敗與安全失敗解析

    這篇文章主要介紹了Java集合快速失敗與安全失敗解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 使用jpa原生sql@Query操作增刪改查

    使用jpa原生sql@Query操作增刪改查

    這篇文章主要介紹了使用jpa原生sql@Query操作增刪改查,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評論