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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用@Autowired注解警告Field injection is not recommended

發(fā)布時(shí)間:2023/12/9 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用@Autowired注解警告Field injection is not recommended 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

From: https://blog.csdn.net/zhangjingao/article/details/81094529

在使用spring框架中的依賴注入注解@Autowired時(shí),idea報(bào)了一個(gè)警告
大部分被警告的代碼都是不嚴(yán)謹(jǐn)?shù)牡胤?#xff0c;所以我深入了解了一下。
被警告的代碼如下:

??? @Autowired
??? UserDao userDao;

警告內(nèi)容是

Field injection is not recommended

意思就是使用變量依賴注入的方式是不被推薦的。
使用idea解決策略是這樣的:

Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies

意思就是總是使用構(gòu)造器的方式強(qiáng)制注入。

依賴注入有三種方式:

??? 變量(filed)注入
??? 構(gòu)造器注入
??? set方法注入

先各自看一下實(shí)現(xiàn)方式
變量(filed)注入

??? @Autowired
??? UserDao userDao;

構(gòu)造器注入

??? final
??? UserDao userDao;

??? @Autowired
??? public UserServiceImpl(UserDao userDao) {
??????? this.userDao = userDao;
??? }

set方法注入

??? private UserDao userDao;

??? @Autowired
??? public void setUserDao (UserDao userDao) {
??????? this.userDao = userDao;
??? }

?

相比較而言:

優(yōu)點(diǎn):變量方式注入非常簡潔,沒有任何多余代碼,非常有效的提高了java的簡潔性。即使再多幾個(gè)依賴一樣能解決掉這個(gè)問題。

缺點(diǎn):不能有效的指明依賴。相信很多人都遇見過一個(gè)bug,依賴注入的對(duì)象為null,在啟動(dòng)依賴容器時(shí)遇到這個(gè)問題都是配置的依賴注入少了一個(gè)注解什么的,然而這種方式就過于依賴注入容器了,當(dāng)沒有啟動(dòng)整個(gè)依賴容器時(shí),這個(gè)類就不能運(yùn)轉(zhuǎn),在反射時(shí)無法提供這個(gè)類需要的依賴。
在使用set方式時(shí),這是一種選擇注入,可有可無,即使沒有注入這個(gè)依賴,那么也不會(huì)影響整個(gè)類的運(yùn)行。
在使用構(gòu)造器方式時(shí)已經(jīng)顯式注明必須強(qiáng)制注入。通過強(qiáng)制指明依賴注入來保證這個(gè)類的運(yùn)行。

另一個(gè)方面:
依賴注入的核心思想之一就是被容器管理的類不應(yīng)該依賴被容器管理的依賴,換成白話來說就是如果這個(gè)類使用了依賴注入的類,那么這個(gè)類擺脫了這幾個(gè)依賴必須也能正常運(yùn)行。然而使用變量注入的方式是不能保證這點(diǎn)的。
既然使用了依賴注入方式,那么就表明這個(gè)類不再對(duì)這些依賴負(fù)責(zé),這些都由容器管理,那么如何清楚的知道這個(gè)類需要哪些依賴呢?它就要使用set方法方式注入或者構(gòu)造器注入。

總結(jié)下:
變量方式注入應(yīng)該盡量避免,使用set方式注入或者構(gòu)造器注入,這兩種方式的選擇就要看這個(gè)類是強(qiáng)制依賴的話就用構(gòu)造器方式,選擇依賴的話就用set方法注入。
?

總結(jié)

以上是生活随笔為你收集整理的使用@Autowired注解警告Field injection is not recommended的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。