最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前置說明:這里的代碼演示都是在UserController類里面使用UserService類,然后通過啟動(dòng)類調(diào)用UserController類,觀察在UserController中是否通過三種依賴注入的方式獲取到UserService對(duì)象,UserService代碼及啟動(dòng)類(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 上下文對(duì)象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //2.獲取 Bean 對(duì)象
        UserController userController = context.getBean("userController", UserController.class);
        //3.使用 Bean 對(duì)象
        userController.sayHi();
    }
}

一,屬性注入

1,屬性注入的使用

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

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

優(yōu)點(diǎn):

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

缺點(diǎn):

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

  •  屬性注入兼容度差,只能在IoC容器中才能使用(類與IoC容器高度耦合),使用其他框架時(shí)不能使用屬性注入;
  • 屬性注入容器違背單一職責(zé)原則(單一職責(zé)原則:一個(gè)類最好只能做一件事,功能最好是單一的,在屬性注入這里指的就是一個(gè)類最好只注入一個(gè)屬性),因?yàn)閷傩宰⑷牒?jiǎn)單方便的優(yōu)勢(shì),開發(fā)者在開發(fā)的過程中就容易濫用屬性注入,導(dǎo)致一個(gè)類中注入多個(gè)對(duì)象.

二,Setter注入

1,setter注入的使用

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

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

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

優(yōu)點(diǎn):

Setter注入滿足單一設(shè)計(jì)職責(zé)原則:因?yàn)閟etter方法的特性就是一個(gè)setter方法只對(duì)應(yīng)一個(gè)對(duì)象,不會(huì)有注入多個(gè)對(duì)象的可能性;

 缺點(diǎn):

  • 不能注入final修飾的對(duì)象;

  •  注入的對(duì)象可能會(huì)被修改:由于setter方法可以被多次調(diào)用,可能存在被修改的風(fēng)險(xiǎn);

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

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

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

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

當(dāng)類中只有一個(gè)吻構(gòu)造方法時(shí)可以省略@Autowired,當(dāng)有多個(gè)構(gòu)造方法時(shí)不可以省略,否則會(huì)報(bào)錯(cuò)(因?yàn)槎鄠€(gè)構(gòu)造方法時(shí)不知道默認(rèn)給哪個(gè)構(gòu)造方法加注解);

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

優(yōu)點(diǎn):

  • 能夠注入final修飾的對(duì)象;

  •  注入的對(duì)象不會(huì)被修改:因?yàn)闃?gòu)造方法只會(huì)被執(zhí)行一次;
  • 構(gòu)造方法注入是完全初始化的:因?yàn)橐蕾囎⑷胧窃跇?gòu)造方法內(nèi)部執(zhí)行的,而構(gòu)造方法又是在類起初創(chuàng)建的時(shí)候就執(zhí)行的,所以會(huì)被完全初始化;
  • 通用性更好:構(gòu)造方法注入因?yàn)榛贘ava的,JDK是最底層框架,所以無論在哪一個(gè)框架都可以適用.

缺點(diǎn):

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

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

四,final對(duì)象能否被注入的原因

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

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

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

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

相關(guān)文章

  • mybatis-plus?插入修改配置默認(rèn)值的實(shí)現(xiàn)方式

    mybatis-plus?插入修改配置默認(rèn)值的實(shí)現(xiàn)方式

    這篇文章主要介紹了mybatis-plus?插入修改配置默認(rèn)值的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Java讀寫.properties文件解決中文亂碼問題

    Java讀寫.properties文件解決中文亂碼問題

    這篇文章主要介紹了Java讀寫.properties文件解決中文亂碼問題,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-11-11
  • rocketmq client 日志的問題處理方式

    rocketmq client 日志的問題處理方式

    這篇文章主要介紹了rocketmq client 日志的問題處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 解決springboot集成rocketmq關(guān)于tag的坑

    解決springboot集成rocketmq關(guān)于tag的坑

    這篇文章主要介紹了解決springboot集成rocketmq關(guān)于tag的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 深入理解Java中的WeakHashMap

    深入理解Java中的WeakHashMap

    這篇文章主要介紹了深入理解Java中的WeakHashMap,WeakHashMap從名字可以得知主要和Map有關(guān),不過還有一個(gè)Weak,我們就更能自然而然的想到這里面還牽扯到一種弱引用結(jié)構(gòu),因此想要徹底搞懂,我們還需要知道四種引用,需要的朋友可以參考下
    2023-09-09
  • Java IO流 File類的常用API實(shí)例

    Java IO流 File類的常用API實(shí)例

    這篇文章主要介紹了Java IO流 File類的常用API實(shí)例的相關(guān)資料,需要的朋友參考下吧
    2017-05-05
  • mybatis plus時(shí)間判斷問題

    mybatis plus時(shí)間判斷問題

    在MyBatisPlus中,時(shí)間判斷可以通過XML轉(zhuǎn)義的方式實(shí)現(xiàn),例如使用>、<、<>、>=、<=進(jìn)行比較,這種方法涉及到SQL符號(hào)的轉(zhuǎn)義,確保查詢語句的安全性和準(zhǔn)確性,特別是在處理大于、小于和等于等邏輯時(shí),正確的轉(zhuǎn)義能夠防止SQL注入等安全問題
    2024-09-09
  • SpringBoot多模塊如何統(tǒng)一管理

    SpringBoot多模塊如何統(tǒng)一管理

    本文詳細(xì)介紹了SpringBoot多模塊項(xiàng)目的統(tǒng)一管理方法,包括核心思想、Maven和Gradle的統(tǒng)一管理實(shí)踐以及最佳實(shí)踐和技巧,通過集中化配置、約定優(yōu)于配置、減少重復(fù)性工作,可以提高多模塊項(xiàng)目的可維護(hù)性、一致性和可擴(kuò)展性
    2025-03-03
  • MyEclipse打開文件跳轉(zhuǎn)到notepad打開問題及解決方案

    MyEclipse打開文件跳轉(zhuǎn)到notepad打開問題及解決方案

    windows系統(tǒng)打開README.md文件,每次都需要右鍵選擇notepad打開,感覺很麻煩,然后就把README.md文件打開方式默認(rèn)選擇了notepad,這樣每次雙擊就能打開,感覺很方便,這篇文章主要介紹了MyEclipse打開文件跳轉(zhuǎn)到notepad打開問題,需要的朋友可以參考下
    2024-03-03
  • SpringTask-Timer實(shí)現(xiàn)定時(shí)任務(wù)的詳細(xì)代碼

    SpringTask-Timer實(shí)現(xiàn)定時(shí)任務(wù)的詳細(xì)代碼

    在項(xiàng)目中開發(fā)定時(shí)任務(wù)應(yīng)該一種比較常見的需求,今天通過示例代碼給大家講解SpringTask-Timer實(shí)現(xiàn)定時(shí)任務(wù)的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2024-06-06

最新評(píng)論

晴隆县| 观塘区| 彭山县| 嘉荫县| 江川县| 乾安县| 鹤壁市| 石嘴山市| 文山县| 沈阳市| 公主岭市| 册亨县| 满洲里市| 广汉市| 信宜市| 文山县| 贵定县| 临汾市| 都安| 玉龙| 唐山市| 叶城县| 南宁市| 南阳市| 侯马市| 青川县| 安达市| 剑河县| 桐庐县| 日喀则市| 文山县| 冕宁县| 扶风县| 卓尼县| 高青县| 蓬安县| 毕节市| 和政县| 舞阳县| 夹江县| 苗栗市|