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

關(guān)于spring依賴注入的方式以及優(yōu)缺點(diǎn)

 更新時間:2023年07月18日 08:45:43   作者:xiegongmiao  
這篇文章主要介紹了關(guān)于spring依賴注入的方式以及優(yōu)缺點(diǎn),依賴注入,是IOC的一個方面,是個通常的概念,它有多種解釋,這概念是說你不用創(chuàng)建對象,而只需要描述它如何被創(chuàng)建,需要的朋友可以參考下

一.依賴注入的三種方式

1.通過構(gòu)造器注入。(spring4.3之后,推薦使用)

2.通過setter注入。(spring4.3之前,推薦使用)

3通過filed注入。

二.三種方式的代碼示例:

Constructor注入

    private AlarmContactService alarmContactService;
	private final AlarmService alarmService;
	private final SysUserService sysUserService;
    @Autowired
	public AlarmContactController(AlarmContactService alarmContactService, AlarmService alarmService,
			SysUserService sysUserService) {
		this.alarmContactService = alarmContactService;
		this.alarmService = alarmService;
		this.sysUserService = sysUserService;
	}

Setter注入

private AlarmContactService alarmContactService;
	private AlarmService alarmService;
	private SysUserService sysUserService;
	@Autowired
	public void setAlarmContactService(AlarmContactService alarmContactService) {
		this.alarmContactService = alarmContactService;
	}
	@Autowired
	public void setAlarmService(AlarmService alarmService) {
		this.alarmService = alarmService;
	}
	@Autowired
	public void setSysUserService(SysUserService sysUserService) {
		this.sysUserService = sysUserService;
	}

Field注入

    @Autowired
	private AlarmContactService alarmContactService;
	@Autowired
	private AlarmService alarmService;
	@Autowired
	private SysUserService sysUserService;

三.3種方式的各優(yōu)點(diǎn)和缺點(diǎn)

三種方式的優(yōu)點(diǎn)分析

1.基于構(gòu)造器注入,會固定依賴注入的順序,不允許我們創(chuàng)建的bean對象之間存在循環(huán)依賴關(guān)系,這樣Spring能解決循環(huán)依賴的問題。

2.基于setter注入,只有對象是需要被注入的時候,才會注入依賴,而不是在初始化的時候就注入。

3.在成員變量上寫上注解來注入,這種方式,精短,可讀性高,不需要多余的代碼,也方便維護(hù)。

三種方式的缺點(diǎn)分析

1.使用構(gòu)造器注入的缺點(diǎn)是,當(dāng)我們構(gòu)造器需要注入的對象比較多時,會顯得我們的構(gòu)造器,冗余,不美觀,可讀性差,也不易維護(hù)。

2.當(dāng)我們選擇setter方法來注入的時候,我們不能將對象設(shè)為final的;

3.當(dāng)我們在field變量上來實(shí)現(xiàn)注入的時候

    a.這樣不符合JavaBean的規(guī)范,而且很有可能引起空指針;

    b.同時也不能將對象標(biāo)為final的;

  c.類與DI容器高度耦合,我們不能在外部使用它;

    d.類不通過反射不能被實(shí)例化(例如單元測試中),你需要用DI容器去實(shí)例化它,這更像集成測試;

來自Spring官方文檔的建議

在Spring 3.x 中,Spring團(tuán)隊(duì)建議我們使用setter來注入:

而在Spring 4.x 中,Spring團(tuán)隊(duì)不再建議我們使用setter來注入,改為了constructor:

Spring團(tuán)隊(duì)通常建議使用構(gòu)造器來注入,因?yàn)樗试S一個應(yīng)用程序組件實(shí)現(xiàn)為不可變對象,并確保所需的依賴項(xiàng)不是空。此外構(gòu)造器注入組件總是返回一個完全初始化狀態(tài)的client客戶端(調(diào)用)。附注,大量的構(gòu)造函數(shù)參數(shù)是一個糟糕的代碼習(xí)慣,看起來也很壞,這意味著類可能有太多的責(zé)任,應(yīng)該被重構(gòu),以更好地解決適當(dāng)?shù)年P(guān)注點(diǎn)分離。

三.解釋下什么是循環(huán)依賴

1. 循環(huán)依賴是什么?

Bean A 依賴 B,Bean B 依賴 A這種情況下出現(xiàn)循環(huán)依賴。

Bean A → Bean B → Bean A     或者 Bean A → Bean B → BeanC → Bean A

2. 循環(huán)依賴會產(chǎn)生什么結(jié)果?

當(dāng)Spring正在加載所有Bean時,Spring嘗試以能正常創(chuàng)建Bean的順序去創(chuàng)建Bean。

例如,有如下依賴:

Bean A → Bean B → Bean C

Spring先創(chuàng)建beanC,接著創(chuàng)建bean B(將C注入B中),最后創(chuàng)建bean A(將B注入A中)。

假如,有如下循環(huán)依賴:

Bean A → Bean B → Bean C → BeanD → Bean A  

但當(dāng)存在循環(huán)依賴時,Spring將無法決定先創(chuàng)建哪個bean。這種情況下,Spring將產(chǎn)生異常BeanCurrentlyInCreationException。

Spring 4.3 的新特征:

在Spring 4.3 以后,如果我們的類中只有單個構(gòu)造函數(shù),那么Spring就會實(shí)現(xiàn)一個隱式的自動注入:

就是我去掉了構(gòu)造器上的@Autowired注解,經(jīng)測試后發(fā)現(xiàn),程序能正常運(yùn)行。alarmContactService,alarmService,sysUserService的依賴也被成功注入了。

    private AlarmContactService alarmContactService;
	private final AlarmService alarmService;
	private final SysUserService sysUserService;
	public AlarmContactController(AlarmContactService alarmContactService, AlarmService alarmService,
			SysUserService sysUserService) {
		this.alarmContactService = alarmContactService;
		this.alarmService = alarmService;
		this.sysUserService = sysUserService;
	}

使用構(gòu)造注入允許加入final,這也表示以后不能再被更改了。 

到此這篇關(guān)于關(guān)于spring依賴注入的方式以及優(yōu)缺點(diǎn)的文章就介紹到這了,更多相關(guān)spring依賴注入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot項(xiàng)目使用?axis?調(diào)用webservice接口的實(shí)踐記錄

    SpringBoot項(xiàng)目使用?axis?調(diào)用webservice接口的實(shí)踐記錄

    這篇文章主要介紹了SpringBoot項(xiàng)目使用?axis?調(diào)用webservice接口,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 淺談Mybatis之參數(shù)傳遞的幾種姿勢

    淺談Mybatis之參數(shù)傳遞的幾種姿勢

    在mybatis的日常開發(fā)中,mapper接口中定義的參數(shù)如何與xml中的參數(shù)進(jìn)行映射呢?本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2021-09-09
  • Java面試題沖刺第一天--基礎(chǔ)篇1

    Java面試題沖刺第一天--基礎(chǔ)篇1

    這篇文章主要為大家分享了最有價值的三道java面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java實(shí)現(xiàn)分頁的前臺頁面和后臺代碼

    Java實(shí)現(xiàn)分頁的前臺頁面和后臺代碼

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)分頁的前臺頁面和后臺代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • SQL注入攻擊及其在SpringBoot中使用MyBatisPlus的防范策略的方法

    SQL注入攻擊及其在SpringBoot中使用MyBatisPlus的防范策略的方法

    本文介紹了如何使用SpringBoot整合JavaDeeplearning4j構(gòu)建一個文本摘要生成系統(tǒng),該系統(tǒng)能夠自動從長篇文本中提取關(guān)鍵信息,生成簡潔的摘要,幫助用戶快速了解文本的主要內(nèi)容,系統(tǒng)使用LSTM神經(jīng)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練,并通過SpringBoot創(chuàng)建RESTful?API進(jìn)行調(diào)用
    2024-11-11
  • Java異步非阻塞編程的幾種方式總結(jié)

    Java異步非阻塞編程的幾種方式總結(jié)

    這篇文章主要介紹了Java異步非阻塞編程的幾種方式總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java集合-HashMap

    Java集合-HashMap

    這篇文章主要介紹了Java集合HashMap,也叫散列表,是一種非常重要的數(shù)據(jù)結(jié)構(gòu),應(yīng)用場景及其豐富,許多緩存技術(shù)(比如memcached)的核心其實(shí)就是在內(nèi)存中維護(hù)一張大的哈希表,下面來看看文章的具體內(nèi)容吧,需要的小伙伴也可參考一下
    2022-01-01
  • Mybatis useGeneratedKeys參數(shù)用法及問題小結(jié)

    Mybatis useGeneratedKeys參數(shù)用法及問題小結(jié)

    這篇文章主要介紹了Mybatis useGeneratedKeys參數(shù)用法及遇到的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • spring事務(wù)@Transactional失效原因及解決辦法小結(jié)

    spring事務(wù)@Transactional失效原因及解決辦法小結(jié)

    今天就跟大家聊聊有關(guān)spring中@Transactional失效原因及解決辦法小結(jié),主要從三個方面考慮,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • SpringBoot使用Apache POI庫讀取Excel文件的操作詳解

    SpringBoot使用Apache POI庫讀取Excel文件的操作詳解

    在日常開發(fā)中,我們經(jīng)常需要處理Excel文件中的數(shù)據(jù),無論是從數(shù)據(jù)庫導(dǎo)入數(shù)據(jù)、處理數(shù)據(jù)報表,還是批量生成數(shù)據(jù),都可能會遇到需要讀取和操作Excel文件的場景,本文將詳細(xì)介紹如何使用Java中的Apache POI庫來讀取Excel文件,需要的朋友可以參考下
    2025-01-01

最新評論

虞城县| 云霄县| 西丰县| 惠来县| 塘沽区| 简阳市| 久治县| 若尔盖县| 工布江达县| 垫江县| 鹤壁市| 申扎县| 长葛市| 南江县| 贵港市| 阿勒泰市| 元氏县| 连山| 乌拉特后旗| 洪洞县| 通辽市| 鸡西市| 塔河县| 台中县| 福州市| 灵宝市| 宁夏| 邵东县| 托克逊县| 宜春市| 利辛县| 监利县| 乌兰浩特市| 浦江县| 商南县| 天柱县| 临高县| 青阳县| 新竹县| 阜宁县| 文登市|