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

Intellij IDEA如何去掉@Autowired 注入警告的方法

 更新時(shí)間:2020年04月14日 09:17:19   作者:飄渺Jam  
這篇文章主要介紹了Intellij IDEA如何去掉@Autowired 注入警告的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

問(wèn)題

在Service層注入Mybatis的Mapper我們通常會(huì)使用@Autowired 自動(dòng)注入

@Autowired
private ProductMapper productMapper;

但是這樣Intellij IDEA會(huì)顯示紅色告警,提示不能自動(dòng)注入。

當(dāng)我們?cè)贑ontroller層注入Service時(shí)我們也經(jīng)常直接在Filed上使用@Autowired 注解,這時(shí)候不顯示紅色警告,但是也顯示Field injection is not recommended 的建議

原因

第一種情況是因?yàn)镮DEA可以識(shí)別并理解Spring的上下文。然而Mapper接口是Mybatis的,IDEA理解不了。所以會(huì)出現(xiàn)紅色告警。

而第二種原因是因?yàn)楣俜讲煌扑]使用Filed進(jìn)行注解,而推薦使用構(gòu)造器或Setter方法進(jìn)行注解,像下面兩種寫(xiě)法就不會(huì)出現(xiàn)警告。

private final ProductService productService;
@Autowired
public ProductController(ProductService productService) {
	this.productService = productService;
}

or

private ProductService productService;
@Autowired
public void setProductService(ProductService productService) {
	this.productService = productService;
}

問(wèn)題是什么

Field注入看起來(lái)非常好,夠簡(jiǎn)潔,代碼通俗易懂。你的類(lèi)可以專(zhuān)注于業(yè)務(wù)而不被依賴(lài)注入所污染。你只需要把@Autowired扔到變量之上就好了,不需要特殊的構(gòu)造器或者set方法,依賴(lài)注入容器會(huì)提供你所需的依賴(lài)。但是Field注入會(huì)帶來(lái)2個(gè)問(wèn)題:

  • 當(dāng)注入的對(duì)象依賴(lài)其他對(duì)象,而被依賴(lài)的對(duì)象沒(méi)被創(chuàng)建的話就會(huì)出現(xiàn)空指針異常。
  • 這樣的類(lèi)沒(méi)辦法在容器之外被重用,也不能期望反射提供其所需的依賴(lài)。

詳細(xì)原因大家可以去這篇文章查看:http://olivergierke.de/2013/11/why-field-injection-is-evil/

構(gòu)造器注入 VS Setter注入

Setter應(yīng)該被用來(lái)注入可變的依賴(lài)。當(dāng)沒(méi)有提供依賴(lài)時(shí),這個(gè)類(lèi)也應(yīng)該能夠運(yùn)轉(zhuǎn)。當(dāng)實(shí)例化對(duì)象后,這些依賴(lài)也能隨時(shí)改變。其實(shí)也視情況而變,有時(shí),一個(gè)不變的對(duì)象是理想狀態(tài)。有時(shí),最好是能在運(yùn)行期間改變對(duì)象的屬性。

構(gòu)造器注入對(duì)象需要依賴(lài)的對(duì)象初始化后才能正常運(yùn)轉(zhuǎn),通過(guò)構(gòu)造器提供這些依賴(lài)就能保證對(duì)象初始化后就能被使用。使用構(gòu)造器注入的一個(gè)可能的影響就是循環(huán)依賴(lài)。

怎么解決

我們可以使用Lombok提供的注解 @RequiredArgsConstructor 來(lái)解決這兩個(gè)問(wèn)題(Lombok這個(gè)大家項(xiàng)目都會(huì)使用吧)

@Service
@Log4j2
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ProductServiceImpl implements ProductService {
  private final ProductMapper productMapper;
	...
}

這里必須使用final修飾符來(lái)修飾注入的Service或Mapper首先我們看看編譯后的類(lèi)是什么樣

編譯完成后變成了使用構(gòu)造器進(jìn)行注入

認(rèn)識(shí)@RequiredArgsConstructor

Lombok官方給出的解釋是: Generates constructor that takes one argument per final / non-null field. 所以它會(huì)為final和nonnull的屬性作為參數(shù)產(chǎn)生一個(gè)構(gòu)造函數(shù)。

而上面我們講了Spring推薦使用Setter或構(gòu)造器注入,那么@RequiredArgsConstructor剛好可以完成這件事,而且還簡(jiǎn)化了你的代碼,何樂(lè)而不為是不是?

到此這篇關(guān)于Intellij IDEA如何去掉@Autowired 注入警告的方法的文章就介紹到這了,更多相關(guān)IDEA去掉@Autowired 注入警告內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Security 中細(xì)化權(quán)限粒度的方法

    Spring Security 中細(xì)化權(quán)限粒度的方法

    這篇文章主要介紹了Spring Security 中細(xì)化權(quán)限粒度的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java創(chuàng)建型設(shè)計(jì)模式之建造者模式詳解

    Java創(chuàng)建型設(shè)計(jì)模式之建造者模式詳解

    建造者模式是Java中一種創(chuàng)建型設(shè)計(jì)模式,它的主要目的是將一個(gè)復(fù)雜對(duì)象的構(gòu)建過(guò)程分解為多個(gè)簡(jiǎn)單對(duì)象的構(gòu)建過(guò)程,本文將詳細(xì)介紹Java中的建造者模式,包括它的定義、結(jié)構(gòu)、實(shí)現(xiàn)方法以及應(yīng)用場(chǎng)景等方面,希望對(duì)大家有所幫助
    2023-05-05
  • java實(shí)現(xiàn)基于SMTP發(fā)送郵件的方法

    java實(shí)現(xiàn)基于SMTP發(fā)送郵件的方法

    這篇文章主要介紹了java實(shí)現(xiàn)基于SMTP發(fā)送郵件的方法,實(shí)例分析了java基于SMTP服務(wù)發(fā)送郵件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Maven安裝本地的jar包和創(chuàng)建帶模板的自定義項(xiàng)目的操作過(guò)程

    Maven安裝本地的jar包和創(chuàng)建帶模板的自定義項(xiàng)目的操作過(guò)程

    這篇文章主要介紹了Maven安裝本地的jar包和創(chuàng)建帶模板的自定義項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-03-03
  • 關(guān)于mybatis使用${}時(shí)sql注入的問(wèn)題

    關(guān)于mybatis使用${}時(shí)sql注入的問(wèn)題

    這篇文章主要介紹了關(guān)于mybatis使用${}時(shí)sql注入的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • IDEA的Mybatis Log Plugin插件配置和使用詳解

    IDEA的Mybatis Log Plugin插件配置和使用詳解

    這篇文章主要介紹了IDEA的Mybatis Log Plugin插件配置和使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • JDK?version和class?file?version(Class編譯版本號(hào))對(duì)應(yīng)關(guān)系解讀

    JDK?version和class?file?version(Class編譯版本號(hào))對(duì)應(yīng)關(guān)系解讀

    這篇文章主要介紹了JDK?version和class?file?version(Class編譯版本號(hào))對(duì)應(yīng)關(guān)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • RabbitMQ之死信隊(duì)列深入解析

    RabbitMQ之死信隊(duì)列深入解析

    這篇文章主要介紹了RabbitMQ之死信隊(duì)列深入解析,?死信,顧名思義就是無(wú)法被消費(fèi)的消息,字面意思可以這樣理解,一般來(lái)說(shuō),producer將消息投遞到 broker 或者直接到 queue 里了,consumer 從 queue 取消息進(jìn)行消費(fèi),需要的朋友可以參考下
    2023-09-09
  • FP-Growth算法的Java實(shí)現(xiàn)+具體實(shí)現(xiàn)思路+代碼

    FP-Growth算法的Java實(shí)現(xiàn)+具體實(shí)現(xiàn)思路+代碼

    FP-Growth算法比Apriori算法快很多(但是卻比不上時(shí)間,how time slipped away)。在網(wǎng)上搜索后發(fā)現(xiàn)Java實(shí)現(xiàn)的FP-Growth算法很少,且大多數(shù)不太能理解):太菜。所以就自己實(shí)現(xiàn)了一下。這篇文章重點(diǎn)介紹一下我的Java實(shí)現(xiàn)
    2021-06-06
  • spring batch 讀取多個(gè)文件數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)示例

    spring batch 讀取多個(gè)文件數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)示例

    本篇文章主要介紹了spring batch 讀取多個(gè)文件數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03

最新評(píng)論

斗六市| 乌拉特后旗| 锡林郭勒盟| 水城县| 宜章县| 宜兰市| 滨海县| 来安县| 麻阳| 安康市| 叙永县| 墨玉县| 靖边县| 万州区| 屏南县| 泰州市| 祥云县| 龙南县| 卢龙县| 屏南县| 梧州市| 桦川县| 浠水县| 金坛市| 凤凰县| 浙江省| 兰坪| 绵竹市| 原平市| 电白县| 嘉义市| 积石山| 鹿邑县| 察隅县| 额尔古纳市| 大足县| 武平县| 扶余县| 奉新县| 新和县| 青海省|