欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

問題

在Service層注入Mybatis的Mapper我們通常會使用@Autowired 自動注入

@Autowired
private ProductMapper productMapper;

但是這樣Intellij IDEA會顯示紅色告警,提示不能自動注入。

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

原因

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

而第二種原因是因?yàn)楣俜讲煌扑]使用Filed進(jìn)行注解,而推薦使用構(gòu)造器或Setter方法進(jìn)行注解,像下面兩種寫法就不會出現(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;
}

問題是什么

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

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

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

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

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

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

怎么解決

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

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

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

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

認(rèn)識@RequiredArgsConstructor

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

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

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

相關(guān)文章

  • 詳解SpringBoot應(yīng)用服務(wù)啟動與安全終止

    詳解SpringBoot應(yīng)用服務(wù)啟動與安全終止

    這篇文章主要介紹了SpringBoot應(yīng)用服務(wù)啟動與安全終止,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • SpringBoot集成七牛云OSS的示例詳解

    SpringBoot集成七牛云OSS的示例詳解

    OSS的英文全稱是Object?Storage?Service,翻譯成中文就是對象存儲服務(wù),官方一點(diǎn)解釋就是對象存儲是一種使用HTTP?API存儲和檢索非結(jié)構(gòu)化數(shù)據(jù)和元數(shù)據(jù)對象的工具,本文給大家詳細(xì)介紹了SpringBoot集成七牛云OSS的示例,需要的朋友可以參考下
    2023-11-11
  • JDBC的基本操作與Statement和PreparedStateMent使用區(qū)別分析

    JDBC的基本操作與Statement和PreparedStateMent使用區(qū)別分析

    這篇文章主要介紹了JDBC的基本操作與Statement和PreparedStateMent使用區(qū)別,Java Database Connectivity,它是代表一組獨(dú)立于任何數(shù)據(jù)庫管理系統(tǒng)(DBMS)的API,聲明在java.sql與javax.sql包中,是SUN(現(xiàn)在Oracle)提供的一組接口規(guī)范
    2023-04-04
  • 利用Maven實(shí)現(xiàn)將代碼打包成第三方公共jar包

    利用Maven實(shí)現(xiàn)將代碼打包成第三方公共jar包

    在項(xiàng)目開發(fā)過程中,我們經(jīng)常需要將一些公共方法提取出來,然后單獨(dú)封裝成一個(gè)第三方公共jar包,采用普通的方式打包后的jar,依賴的工程執(zhí)行編譯時(shí),卻提示找不到對應(yīng)的依賴包,那么如何將工程打包為可執(zhí)行jar包呢?下面向大家分享三種方法
    2022-10-10
  • 關(guān)于SpringBoot在有Ajax時(shí)候不跳轉(zhuǎn)的問題解決

    關(guān)于SpringBoot在有Ajax時(shí)候不跳轉(zhuǎn)的問題解決

    最近在使用Ajax來發(fā)送一些數(shù)據(jù)給后臺一個(gè)Controller,但是遇到些問題,所以下面這篇文章主要給大家介紹了關(guān)于SpringBoot在有Ajax時(shí)候不跳轉(zhuǎn)問題的解決辦法,需要的朋友可以參考下
    2022-05-05
  • HashMap在JDK7與JDK8中的實(shí)現(xiàn)過程解析

    HashMap在JDK7與JDK8中的實(shí)現(xiàn)過程解析

    這幾天學(xué)習(xí)了HashMap的底層實(shí)現(xiàn),但是發(fā)現(xiàn)好幾個(gè)版本的,代碼不一,很多文章都是舊版本JDK1.6.JDK1.7的。現(xiàn)在我來分析下JDK7與JDK8中HashMap的實(shí)現(xiàn)過程
    2021-09-09
  • springboot+element-ui實(shí)現(xiàn)多文件一次上傳功能

    springboot+element-ui實(shí)現(xiàn)多文件一次上傳功能

    這篇文章主要介紹了springboot+element-ui多文件一次上傳功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • ArrayList和LinkedList的區(qū)別、擴(kuò)容機(jī)制以及底層的實(shí)現(xiàn)方式

    ArrayList和LinkedList的區(qū)別、擴(kuò)容機(jī)制以及底層的實(shí)現(xiàn)方式

    這篇文章主要介紹了ArrayList和LinkedList的區(qū)別、擴(kuò)容機(jī)制以及底層的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Spring Bean生命周期之Bean的注冊詳解

    Spring Bean生命周期之Bean的注冊詳解

    這篇文章主要為大家詳細(xì)介紹了Spring Bean生命周期之Bean的注冊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • SpringBoot Import及自定義裝配實(shí)現(xiàn)方法解析

    SpringBoot Import及自定義裝配實(shí)現(xiàn)方法解析

    這篇文章主要介紹了SpringBoot Import及自定義裝配實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08

最新評論