IntellijIDEA如何去掉@Autowired注入警告

這篇文章主要為大家展示了Intellij IDEA如何去掉@Autowired注入警告,內(nèi)容簡(jiǎn)而易懂,希望大家可以學(xué)習(xí)一下,學(xué)習(xí)完之后肯定會(huì)有收獲的,下面讓小編帶大家一起來看看吧。

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于做網(wǎng)站、成都網(wǎng)站制作、鎮(zhèn)賚網(wǎng)絡(luò)推廣、微信平臺(tái)小程序開發(fā)、鎮(zhèn)賚網(wǎng)絡(luò)營(yíng)銷、鎮(zhèn)賚企業(yè)策劃、鎮(zhèn)賚品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供鎮(zhèn)賚建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:muchs.cn

問題

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

@Autowired
private ProductMapper productMapper;

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

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

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

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

原因

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

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

問題是什么

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

  • 當(dāng)注入的對(duì)象依賴其他對(duì)象,而被依賴的對(duì)象沒被創(chuàng)建的話就會(huì)出現(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í)例化對(duì)象后,這些依賴也能隨時(shí)改變。其實(shí)也視情況而變,有時(shí),一個(gè)不變的對(duì)象是理想狀態(tài)。有時(shí),最好是能在運(yùn)行期間改變對(duì)象的屬性。

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

怎么解決

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

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

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

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

編譯完成后變成了使用構(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)化了你的代碼,何樂而不為是不是?

以上就是關(guān)于Intellij IDEA如何去掉@Autowired注入警告的內(nèi)容,如果你們有學(xué)習(xí)到知識(shí)或者技能,可以把它分享出去讓更多的人看到。

網(wǎng)頁題目:IntellijIDEA如何去掉@Autowired注入警告
網(wǎng)頁鏈接:http://muchs.cn/article8/jpjcop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、品牌網(wǎng)站建設(shè)品牌網(wǎng)站設(shè)計(jì)、靜態(tài)網(wǎng)站、營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司