日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring选择哪种注入方式

發布時間:2025/1/21 javascript 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring选择哪种注入方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. Spring常見的注入方式

1.1 Field注入

field即在變量上直接使用注解進行注入,內部使用反射的方式實現注入到field中。

  • 優點:代碼簡潔有效,最為開發人員喜歡使用
  • 缺點:依賴對象可能為null而報空指針異常,容易出現循環依賴問題
@Autowiredprivate GoodsCategoryService goodsCategoryService;

1.2 setter注入

spring 3.x版本中推薦使用的注入方式,通過在set方法上使用注解完成對象注入。

  • 優點:選擇性注入,可有可無,依賴不會影響整個項目運行
  • 缺點:在對象實例化后,依賴信息依然可以通過set方法修改,不太好
private GoodsCategoryService goodsCategoryService;@Autowiredpublic setGoodsCategoryService(GoodsCategoryService goodsCategoryService){this.goodsCategoryService = goodsCategoryService;} ? ?

1.3 構造器注入

spring 4.x版本時Spring團隊推薦使用的注入方式,將注解標注在構造函數上,對象以參數的形式傳遞,在構造函數中完成注入對象的初始化。

  • 優點:變量定義使用強制性的顯式注入(final關鍵字保證不可變)、避免空指針和循環依賴,
  • 缺點:在需要注入的依賴較多時,使用構造方法臃腫
private final GoodsCategoryService goodsCategoryService; @Autowired public GoodServiceImpl(GoodsCategoryService goodsCategoryService){this.goodsCategoryService = goodsCategoryService; }

2. Spring為什么推薦使用構造器注入

Field注入盡管代碼上簡潔有效,但是會帶來一些問題:

  • 對于IOC容器以外的環境,除了使用反射來提供它需要的依賴之外,無法復用該實現類
  • 不調用依賴bean時,不會發現空指針的異常,在運行時調用會報異常
  • 使用field注入可能會導致循環依賴,即A里面注入B,B里面又注入A
  • 會造成依賴臃腫,職責過多,使用Filed注入時,添加數量不受限制(沒有警告),可能會注入過多的依賴項,違反了單一職責原則。
  • Setter方法注入是Spring 3.x版本推薦的注入方式,因為setter的方式能用讓類在之后重新配置或者重新注入,但是

    • 寫起來比較麻煩,每個依賴都需要一個set方法
    • 可以重新配置或注入雖然方便,但是有些依賴需要不可變,使用此種方式產生不確定性

    構造器注入是Spring 4.x 版本推薦的注入方式,主要優點有:

  • 依賴不可變,使用final定義,保證注入后的不可變
  • 依賴不為null,使用構造函數傳參的方式,在實例化對象傳參時如果參數為null,則報錯,提前避免了空指針異常
  • 在傳參時傳入的是依賴對象,而該對象傳入時會保證對象類已經完成了初始化,也同時保證了對象不為null
  • 如果構造器注入時發生了循環依賴,在項目啟動時就會報錯BeanCurrentlyInCreationException,而Field注入只有在使用時才會報錯
  • 3. @Autowired、@Resource和@Inject的區別

    3.1 @Autowired

    • @Autowired注解是Spring2.5之后帶入的注解,通過AutowiredAnnotationBeanPostProcessor類實現注入
    • @Autowired可以標注在CONSTRUCTOR、METHOD、PARAMETER、FIELD、ANNOTATION_TYPE之上
    • @Autowired默認根據bean類型進行自動裝配,byType
    • @Autowired注入時如果發現同類型有多個bean,此時需要使用@Qualifier注解來指定bean的name,即byName
    • @Autowired注解有屬性required,默認為true,設置為false則表示未找到對應bean時不拋出異常

    3.2 @Resource

    • @Resource時javax.annotation包下的注解
    • @Resource可以標注在TYPE, FIELD, METHOD之上
    • @Resource是根據屬性名稱進行自動裝配的,其擁有屬性name,可以根據屬性值指定裝配bean的name

    3.3 @Inject

    @Inject注解需要導入javax.inject.Inject包,能實現注入 @Inject可以標注在CONSTRUCTOR、METHOD、FIELD之上 @Inject注解是根據類型自動裝配的,如果需要指定名稱,則需要配合@Named注解

    4. 總結

    盡管Spring 4.x 推薦使用構造器注入,但是我們仍然可以使用其他方式,且可以使用混合方式注入

    • 不可變的注入使用構造器
    • 可變可選注入使用setter方法
    • 對于多實現的依賴注入時,可以使用Filed注入或者setter方法來指定注入的實現
    • 實際使用Field注入的仍然很多,大部分是一些遺留問題,后續新項目可以嘗試盡量避免Field注入

    總結

    以上是生活随笔為你收集整理的Spring选择哪种注入方式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲精品成人在线 | 日本人の夫妇交换 | 黄色国产在线观看 | 国产91麻豆视频 | 欧美一区二区视频在线观看 | 蜜臀少妇久久久久久久高潮 | 快播在线视频 | 久久亚洲AV成人无码国产人妖 | 日韩在线精品视频 | 67194午夜 | 国产精品一区二区在线免费观看 | 欧美老女人性生活 | 69xxxx国产| 男女考妣视频 | 日韩av麻豆 | 国产精品手机在线观看 | 精品国产99久久久久久宅男i | 欧美日韩精品一区二区三区蜜桃 | 91精品人妻一区二区三区 | 91碰在线视频 | 日本久久网站 | 无遮挡国产 | 亚洲片国产一区一级在线观看 | 在线观看精品 | 天堂中文8 | 久色免费视频 | 台湾佬成人中文网222vvv | 无码国内精品人妻少妇蜜桃视频 | 亚洲国产高清国产精品 | 欧洲-级毛片内射 | 求av网站 | 亚洲第一大综合区 | 久久亚洲欧洲 | 亚洲精品色图 | 91国模少妇一区二区三区 | 亚洲 另类 春色 国产 | 精品久久9999 | 豆国产97在线 | 亚洲 | 午夜色av | 久久久久久久一区二区三区 | 国产精品久久久免费视频 | 色偷偷av | a国产免费 | 国产精品久久久免费观看 | 国模一区二区三区 | 精品一区二区免费 | √天堂在线 | 精品视频在线播放 | 亚洲免费观看高清在线观看 | 色成人综合网 | 婷婷丁香在线 | 影音先锋在线观看视频 | 欧美日日操 | 色诱久久av | 国产成人一区二区三区电影 | 欧美视频www | 欧美中文字幕一区二区三区 | 亚洲精品在线观看av | 国产一区二区三区四区五区 | 深爱五月激情五月 | 精品熟妇一区二区三区 | 国产网站在线看 | www国产91 | 91九色蝌蚪视频 | 久草电影网站 | 久草免费看| 亚洲性xxx | 好爽…又高潮了毛片免费看 | 中文字幕视频观看 | 亚洲色图一区二区 | 日本色一区 | 日日色综合 | 麻豆av一区二区 | 国产精品视频在 | 日韩激情在线观看 | 97一级片| 99色在线观看 | 久久99久久精品 | 黄页网站免费观看 | 天天干天天爱天天射 | 免费毛片基地 | 老色鬼av | 偷操| 日韩欧美中文字幕在线视频 | 欧美女优一区二区 | 日韩一级一区 | 狼性av懂色av禁果av | 国产在线一二区 | 中文字幕欲求不满 | 欧美性狂猛xxxxxbbbbb | 青青毛片 | 欧洲精品无码一区二区 | 日韩视频播放 | 动漫涩涩免费网站在线看 | 午夜精品一区二区三区在线视频 | 91一二区| 日韩丰满少妇 | 精品福利影院 | 成人xxxx |