国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot項(xiàng)目中添加了@Service然而無法注入Service接口的問題

這篇具有很好參考價(jià)值的文章主要介紹了SpringBoot項(xiàng)目中添加了@Service然而無法注入Service接口的問題。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

昨天在項(xiàng)目中使用代碼生成器生成了各層面的代碼,但是由于未知的原因一直無法調(diào)用。經(jīng)過多方查找后才發(fā)現(xiàn)是@MapperScan注解的問題,由于這個(gè)藏得比較隱蔽,所以在此記錄一下。

問題描述

在接口完成后調(diào)用接口,發(fā)現(xiàn)無法調(diào)用接口,顯示錯(cuò)誤是

ERROR 1552 --- [nio-8081-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.example.mydemo.service.xxxxxx] with root cause

大致的意思是綁定錯(cuò)誤,無法達(dá)到映射的意思。無法找到Service包下面的xxxxService實(shí)現(xiàn)類。

排查過程

從百度上看,一般可能是mapper綁定失敗所致,所以先從排查mapper有關(guān)的類和接口甚至文件開始。

  1. ?檢查xml文件所在package名稱是否和Mapper interface所在的包名一一對(duì)應(yīng);
  2. ?檢查xml的namespace是否和xml文件的package名稱一一對(duì)應(yīng);
  3. ?檢查方法名稱是否對(duì)應(yīng);
  4. ?檢查配置文件里的mapper路徑是否正確

但是這里排查了很多遍,都沒有發(fā)現(xiàn)相關(guān)的問題。同事給了我一個(gè)方法,測(cè)試接口是否確實(shí)被注入了。


@Autowired
private ApplicationContext applicationContext;
@GetMapping("test")
public void test(){
    String[] beanNames = applicationContext.getBeanDefinitionNames();
    for (String beanName : beanNames) {
        Object bean = applicationContext.getBean(beanName);
        if (bean instanceof Mapper) {
            // 處理Mapper的Bean實(shí)例
            System.out.println(beanName + " is a Mapper bean.");
        }
    }
}

運(yùn)行后發(fā)現(xiàn),mapper確實(shí)注入了。

mapper沒有注入到service里,spring boot,后端,java

所以有可能是Service接口和實(shí)現(xiàn)類的問題,按照這個(gè)思路進(jìn)行排查。

然后排查到啟動(dòng)類上面,當(dāng)時(shí)的啟動(dòng)類是這么寫的

@MapperScan(value = {
        "com.jsb.iot.common",
        "com.jsb.iot.stopcar.parking_lot",
        "com.jsb.iot.stopcar.order"
})
@SpringBootApplication
public class StopCarApplication {

    public static void main(String[] args) {
        SpringApplication.run(StopCarApplication.class, args);
    }

}

試著給類名后面的包名加上dao以縮小掃描范圍。

@MapperScan(value = {
        "com.jsb.iot.common",
        "com.jsb.iot.stopcar.parking_lot.dao",
        "com.jsb.iot.stopcar.order.dao"
})
@SpringBootApplication
public class StopCarApplication {

    public static void main(String[] args) {
        SpringApplication.run(StopCarApplication.class, args);
    }

}

發(fā)送請(qǐng)求測(cè)試,結(jié)果測(cè)試成功。搜查后發(fā)現(xiàn)原因

原因

@Mapper

org.apache.ibatis.annotations.Mapper;

作用:給該注解下面的接口在編譯時(shí)生成對(duì)應(yīng)的動(dòng)態(tài)代理類并且注入到Spring容器中。

@MapperScan

org.mybatis.spring.annotation.MapperScan;

作用:在啟動(dòng)類上配置,配置的是持久層接口的包的路徑。編譯后會(huì)把路徑下所有的接口都生成動(dòng)態(tài)代理類

包下面的所有接口都會(huì)實(shí)現(xiàn)代理類,這就意味著在之前的寫法中,除了impl類被注入了Spring容器中之外,還注入了一個(gè)Service的實(shí)現(xiàn)類,于是乎在Controller層調(diào)用Service時(shí),并沒有真正獲取被注入的impl類,所以無法調(diào)用mapper接口。這種情況只有運(yùn)行時(shí)才會(huì)報(bào)錯(cuò)。

總結(jié)

@MapperScan指定范圍下的所有接口,是所有接口,不論是Mapper接口、還是Service接口、或者是其它什么接口,只要接口是在@MapperScan指定的范圍內(nèi),Mybatis都會(huì)對(duì)該接口進(jìn)行對(duì)應(yīng)的代理實(shí)現(xiàn)(并將代理實(shí)現(xiàn)類注冊(cè)進(jìn)容器中)。所以在使用@MapperScan時(shí),一定要注意指定的范圍不能過大。

@Mapper和@MapperScan注解以及共存

在排查問題時(shí),偶然遇到@Mapper和@MapperScan注解的共存情況問題,現(xiàn)在把結(jié)果附加上去。

  1. 只使用@Mapper注解,不使用@MapperScan注解。會(huì)掃描@Mapper注解所在接口,生成動(dòng)態(tài)代理類,注入到Spring容器中。
  2. 只使用@MapperScan注解,不使用@Mapper注解。會(huì)掃描@MapperScan注解配置的包下面的接口生成動(dòng)態(tài)代理類,注入到Spring容器中。
  3. @Mapper、@MapperScan注解都使用,使用@Mapper的接口,如果在@MapperScan注解中有配置包路徑,那么可以正常使用。
  4. @Mapper、@MapperScan注解都使用,使用@Mapper的接口,如果在@MapperScan注解中沒有配置包路徑,那么會(huì)報(bào)錯(cuò),解決辦法,就是在@MapperScan注解中配置正確路徑下的包即可。
?參考

?2021120101_@Mapper和@MapperScan注解以及共存_mapperscan和mapper注解-CSDN博客目錄1、@Mapper、@MapperScan注解2、報(bào)錯(cuò)使用場(chǎng)景1、@Mapper、@MapperScan注解@Mapper注解:使用:直接在接口類上使用,包是:org.apache.ibatis.annotations.Mapper作用:為有此注解的接口生成動(dòng)態(tài)代理類,并且注入到spring容器中。@MapperScan注解:使用:在啟動(dòng)類上配置,配置的是持久層接口的包路徑,標(biāo)注批量生成此包下的接口的動(dòng)態(tài)代理類,并且注入到容器中。2、報(bào)錯(cuò)使用場(chǎng)景問題描述:使用_mapperscan和mapper注解https://blog.csdn.net/m0_48983233/article/details/121648122

?@MapperScan與@Mapper_@mapperscan和@mapper-CSDN博客@MapperScan與@Mapper@MapperScan與@Mapper背景說明@MapperScan與@Mapper的作用通過@Mapper讓Mybatis對(duì)接口提供代理實(shí)現(xiàn)通過@MapperScan讓Mybatis對(duì)接口提供代理實(shí)現(xiàn)背景說明我們?cè)诰帉憁apper時(shí),只需要編寫接口而不需要對(duì)其實(shí)現(xiàn),由Mybatis框架對(duì)接口提供對(duì)應(yīng)的代理實(shí)現(xiàn)類(,并將代理實(shí)現(xiàn)類注冊(cè)進(jìn)容器中)。但是Mybatis是怎么知道需要對(duì)哪些接口進(jìn)行代理實(shí)現(xiàn)呢,就是通過@MapperScan與@Mappe_@mapperscan和@mapperhttps://blog.csdn.net/justry_deng/article/details/124227444

?SpringBoot中Service實(shí)現(xiàn)類添加@Service卻任然無法注入的問題 - 簡(jiǎn)書最近一直在研究Spring Boot。從GitHub上下載了一個(gè)my-Blog源碼,一邊看,一邊自己嘗試去實(shí)現(xiàn),結(jié)果掉在坑了,研究了近一周才爬出來,特地來這博客園記錄下來,一...https://www.jianshu.com/p/b72a1ffb3672文章來源地址http://www.zghlxwxcb.cn/news/detail-786759.html

到了這里,關(guān)于SpringBoot項(xiàng)目中添加了@Service然而無法注入Service接口的問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 關(guān)于在 springboot 中使用 @Autowired 注解來對(duì) TemplateEngine 進(jìn)行自動(dòng)裝配時(shí),無法注入的問題。

    關(guān)于在 springboot 中使用 @Autowired 注解來對(duì) TemplateEngine 進(jìn)行自動(dòng)裝配時(shí),無法注入的問題。

    本文是基于江南一點(diǎn)雨的 Spring Boot+Vue 系列視頻教程第 三 章的第三節(jié),詳情參考Spring Boot+Vue系列視頻教程 在觀看學(xué)習(xí)這一節(jié)時(shí),發(fā)現(xiàn)當(dāng)進(jìn)行手動(dòng)渲染 Thymeleaf 模板時(shí),通過 @Autowired 注解來對(duì) TemplateEngine 進(jìn)行自動(dòng)裝配時(shí),發(fā)現(xiàn) idea 對(duì)其顯示 No beans of \\\'TemplateEngine \\\' type of found。

    2024年02月02日
    瀏覽(30)
  • 快速掌握SpringBoot項(xiàng)目中的domain、mapper、service、controller層作用與書寫格式

    快速掌握SpringBoot項(xiàng)目中的domain、mapper、service、controller層作用與書寫格式

    承接上篇文章:http://t.csdn.cn/49QHB ①四個(gè)層負(fù)責(zé)的功能與作用: 1. Domain:包含業(yè)務(wù)實(shí)體,用于傳輸和封裝數(shù)據(jù)。作用:作為數(shù)據(jù)載體,用于在各個(gè)模塊之間傳遞業(yè)務(wù)數(shù)據(jù)。 2. Mapper:實(shí)現(xiàn)Domain與數(shù)據(jù)庫表的映射及數(shù)據(jù)訪問邏輯。作用:負(fù)責(zé)數(shù)據(jù)訪問,將業(yè)務(wù)實(shí)體與數(shù)據(jù)庫表進(jìn)行映射,實(shí)現(xiàn)

    2024年02月03日
    瀏覽(28)
  • SpringBoot項(xiàng)目添加WebService服務(wù)

    1.簡(jiǎn)單描述 WebService簡(jiǎn)單理解就是用http發(fā)送接收xml數(shù)據(jù),但這個(gè)xml得遵守系統(tǒng)的規(guī)范。這個(gè)規(guī)范就是WSDL(Web服務(wù)描述語言,Web Services Description Language)。 在WebService中傳輸?shù)膞ml有一個(gè)正式的名稱叫Soap(簡(jiǎn)單對(duì)象訪問協(xié)議 Simple Object Access Protocol)。 WebService分為客戶端和服務(wù)端

    2024年02月16日
    瀏覽(16)
  • springboot項(xiàng)目中添加自定義日志

    springboot項(xiàng)目中添加自定義日志

    或 application.yml文件中的配置 對(duì)上述的配置進(jìn)行說明:

    2024年02月17日
    瀏覽(15)
  • SpringBoot項(xiàng)目中添加證書授權(quán)認(rèn)證

    SpringBoot項(xiàng)目中添加證書授權(quán)認(rèn)證

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 在上線的項(xiàng)目中,需要添加一個(gè)定時(shí)授權(quán)的功能,對(duì)系統(tǒng)的進(jìn)行授權(quán)認(rèn)證,當(dāng)授權(quán)過期時(shí)提示用戶需要更新授權(quán)或獲取授權(quán),不讓用戶無限制的使用軟件。 在查閱相關(guān)資料進(jìn)行整理后,對(duì)該場(chǎng)景做了一

    2024年01月20日
    瀏覽(14)
  • SpringBoot項(xiàng)目報(bào)錯(cuò):org.springframework.beans.factory.UnsatisfiedDependencyException依賴注入異常(已解決)

    SpringBoot項(xiàng)目報(bào)錯(cuò):org.springframework.beans.factory.UnsatisfiedDependencyException依賴注入異常(已解決)

    ? ? ?? 目錄 報(bào)錯(cuò)信息 可能原因 結(jié)論 ????????最近在學(xué)Spring Boot,今天在做Spring Boot + Mybatis Plus + Vue項(xiàng)目時(shí)啟動(dòng)后端報(bào)錯(cuò): ? ? ? ? 先看報(bào)錯(cuò)信息,說出現(xiàn)了一個(gè) 依賴注入異常(UnsatisfiedDependencyException) ,在創(chuàng)建名為 \\\'loginController\\\' 的bean時(shí)出錯(cuò),并且問題出現(xiàn)在字段 \\\'

    2024年02月11日
    瀏覽(25)
  • SpringBoot+Vue項(xiàng)目添加騰訊云人臉識(shí)別

    人臉識(shí)別是一種基于人臉特征進(jìn)行身份認(rèn)證和識(shí)別的技術(shù)。它使用計(jì)算機(jī)視覺和模式識(shí)別的方法,通過分析圖像或視頻中的人臉特征,例如臉部輪廓、眼睛、鼻子、嘴巴等,來驗(yàn)證一個(gè)人的身份或識(shí)別出他們是誰。 人臉識(shí)別可以應(yīng)用在多個(gè)領(lǐng)域,包括安全領(lǐng)域、訪問控制系統(tǒng)

    2024年02月11日
    瀏覽(18)
  • 【IDEA】maven項(xiàng)目添加模塊時(shí),webapp沒有被標(biāo)識(shí),無法識(shí)別的解決方法

    【IDEA】maven項(xiàng)目添加模塊時(shí),webapp沒有被標(biāo)識(shí),無法識(shí)別的解決方法

    新添加maven項(xiàng)目模塊后,webapp目錄未被標(biāo)識(shí),即沒有小藍(lán)點(diǎn)的圖標(biāo)顯示。如下圖 點(diǎn)擊“File”下的“Project Strucure”,在彈出的框中,選中“Modules”下的項(xiàng)目名稱,也就是“demo1”,點(diǎn)擊“+”號(hào),在彈出框中選擇“Web”。 修改“Name”為“webapp”,接下來配置web的路徑,上方的

    2024年02月07日
    瀏覽(18)
  • SpringBoot項(xiàng)目添加2FA雙因素身份認(rèn)證

    SpringBoot項(xiàng)目添加2FA雙因素身份認(rèn)證

    雙因素身份驗(yàn)證(2FA)是一種安全系統(tǒng),要求用戶提供兩種不同的身份驗(yàn)證方式才能訪問某個(gè)系統(tǒng)或服務(wù)。國內(nèi)普遍做短信驗(yàn)證碼這種的用的比較少,不過在國外的網(wǎng)站中使用雙因素身份驗(yàn)證的還是很多的。用戶通過使用驗(yàn)證器掃描二維碼,就能在app上獲取登錄的動(dòng)態(tài)口令,

    2024年04月25日
    瀏覽(26)
  • IDEA無法識(shí)別SpringBoot項(xiàng)目

    IDEA無法識(shí)別SpringBoot項(xiàng)目

    好久沒打開的SpringBoot項(xiàng)目,今天打開突然發(fā)現(xiàn)IDEA識(shí)別不了了,也無法啟動(dòng),具體如下圖: ?查了一些資料,具體的原因是:pom.xml沒有被maven管理,所以導(dǎo)致無法識(shí)別SpringBoot啟動(dòng)類。 解法方法: ?1、選中pom.xml,右擊,選擇add as maven? ?2、配置SpringBoot的configruations,? 選中ad

    2024年02月11日
    瀏覽(13)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包