成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

踩坑:IDEA中項(xiàng)目順利運(yùn)行但@Autowired報(bào)錯(cuò)的解決方法

yanbingyun1990 / 2414人閱讀

摘要:今天在搭建項(xiàng)目的時(shí)候,遇到了一個(gè)奇怪的問題。中需要注入,中需要注入的接口,屬性都是通過標(biāo)簽名的方式注入的。給你報(bào)錯(cuò),就算不影響項(xiàng)目運(yùn)行,那也確實(shí)有些不合適的地方。但是如果項(xiàng)目無法運(yùn)行,僅關(guān)掉報(bào)警根本沒卵用。

今天在搭建SpringBoot+SpringMVC+mybaits項(xiàng)目的時(shí)候,遇到了一個(gè)奇怪的問題。

Controller中需要注入Service,Service中需要注入Mybatis的Dao接口,屬性都是通過“@+標(biāo)簽名”的方式注入的。比如一個(gè)簡單的查詢用戶的controller,需要注入一個(gè)與用戶有關(guān)的service:

@RequestMapping("/user")
@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/list/all")
    public List listAll(){
        return userService.listAll();
    }
}

service中又要注入Dao的接口:

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    public List listAll(){
        return userMapper.selectAll();
    }
}

但是在Service層竟然出現(xiàn)了如此問題:

不過問題不大,項(xiàng)目能夠正常運(yùn)行,并且使用@Resource標(biāo)簽代替@Autowired就可以完全解決問題:

但是為什么@Autowired在IDEA里面會(huì)有問題呢,經(jīng)過網(wǎng)上尋找+個(gè)人思考,有以下兩點(diǎn)結(jié)論:

1- 根據(jù)使用報(bào)錯(cuò)信息在網(wǎng)上搜索出的解決方案的總結(jié)

首先是IDEA這個(gè)工具強(qiáng)大的檢測報(bào)警機(jī)制,如果IDEA說你的代碼沒問題,那么它肯定能編譯通過。給你報(bào)錯(cuò),就算不影響項(xiàng)目運(yùn)行,那也確實(shí)有些不合適的地方??吹骄W(wǎng)上有些答案很可笑,讓你去settings里面把這個(gè)報(bào)警關(guān)掉,這不是掩耳盜鈴嗎?當(dāng)然了,如果不影響項(xiàng)目的正常運(yùn)行,關(guān)掉報(bào)警也是一種方法,畢竟程序員看不見warning。但是如果項(xiàng)目無法運(yùn)行,僅關(guān)掉報(bào)警根本沒卵用。

2- @Autowired與@Resource的區(qū)別
@Autowired根據(jù)type注入,@Resource根據(jù)name注入,本質(zhì)上均實(shí)現(xiàn)了注入效果,只是依據(jù)不同,那么為什么我在Controller中使用@Autowired就沒問題呢,我認(rèn)為原因在于兩個(gè)地方注入Bean的類型不一樣。以下是個(gè)人思考,如有不對請指教。
一般來說,注入controller的service雖然一般來說我們都是注入一個(gè)接口,但是該接口有實(shí)現(xiàn)類,并且使用@Service進(jìn)行關(guān)聯(lián),所以注入類型應(yīng)該也可以視為一個(gè)類,但是mybatis僅需提供Dao接口,也就是說,注入service的dao只是一個(gè)接口,而沒有實(shí)現(xiàn)類,雖然mybatis能夠通過Dao接口和xml文件實(shí)現(xiàn)與數(shù)據(jù)庫的操作,但是@Autowired并沒有這個(gè)識(shí)別功能,可能它就認(rèn)為你類型不匹配,無法使用通過類型注入的方法。這個(gè)理論我通過一個(gè)簡單的方法驗(yàn)證通過,做法如下:
我把service的實(shí)現(xiàn)類給取消了實(shí)現(xiàn)接口的語句‘implements UserService’,然后變成下面這樣:

@Service
public class UserServiceImpl{
    @Resource
    private UserMapper userMapper;

    public List listAll(){
        return userMapper.selectAll();
    }
}

此時(shí),IDEA給controller中的注入也報(bào)出同樣的警告:


所以我有充足的理由斷定,應(yīng)該是這個(gè)原因,也就是說,@Autowired不適用service層對于dao的注入。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75378.html

相關(guān)文章

  • macbook 下安裝Goglang 以及安裝svn插件所遇到的問題

    摘要:新入手了一個(gè),打算重新配置下自己的開發(fā)環(huán)境,老的畢竟硬盤太小了,所以這次換了個(gè)的,好了閑話不說了,主要記錄下我在安裝系列產(chǎn)品中遇到的問題和解決辦法。安裝的產(chǎn)品,下載,安裝,很順利,沒毛病。   新入手了一個(gè)Macbook pro,打算重新配置下自己的開發(fā)環(huán)境,老的mac畢竟硬盤太小了,所以這次換了個(gè)1T的,好了閑話不說了,主要記錄下我在安裝idea系列產(chǎn)品中遇到的問題和解決辦法。   ...

    tainzhi 評論0 收藏0
  • macbook 下安裝Goglang 以及安裝svn插件所遇到的問題

    摘要:新入手了一個(gè),打算重新配置下自己的開發(fā)環(huán)境,老的畢竟硬盤太小了,所以這次換了個(gè)的,好了閑話不說了,主要記錄下我在安裝系列產(chǎn)品中遇到的問題和解決辦法。安裝的產(chǎn)品,下載,安裝,很順利,沒毛病。   新入手了一個(gè)Macbook pro,打算重新配置下自己的開發(fā)環(huán)境,老的mac畢竟硬盤太小了,所以這次換了個(gè)1T的,好了閑話不說了,主要記錄下我在安裝idea系列產(chǎn)品中遇到的問題和解決辦法。   ...

    lentrue 評論0 收藏0
  • 物聯(lián)網(wǎng)-thingsboard源碼編譯安裝踩坑記錄

    摘要:文章目錄前言從上下源碼后運(yùn)行報(bào)錯(cuò)不支援驗(yàn)證類型。解決辦法就是去找到下載,注意選擇源碼版本下載,如下圖。入門教程本地環(huán)境搭建和源碼編譯安裝,獻(xiàn)給編譯失敗的同學(xué),教程不斷優(yōu)化附錄 ...

    用戶84 評論0 收藏0
  • springMVC-returned a response status of 400 OR 403

    摘要:能夠幫助大家少踩坑就好。找到上述代碼中最相似的地方,添加錯(cuò)誤解決方法路徑錯(cuò)誤,即當(dāng)前訪問的路徑下沒有相關(guān)文件。解決辦法在文件存儲(chǔ)服務(wù)器中的項(xiàng)目名的路徑下,新建一個(gè)和你上傳服務(wù)器路徑一致的文件,我這里是文件。 能夠幫助大家少踩坑就好。 1.springMVC跨服務(wù)器上傳文件報(bào)錯(cuò)問題 當(dāng)我們使用jersy把圖片上傳到我們的圖片服務(wù)器中【tomcat】,我們可能會(huì)遇見以下三個(gè)錯(cuò)誤: retu...

    aervon 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<