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

解決Spring使用@MapperScan問題

 更新時(shí)間:2021年09月14日 10:08:00   作者:「已注銷」  
這篇文章主要介紹了解決Spring使用@MapperScan問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

問題場景

今天小編在MyBatis 整合Spring 的時(shí)候,使用到了@MapperScan,在啟動(dòng)期出現(xiàn)了一個(gè)錯(cuò)誤:

Invalid default: public abstract java.lang.Class org.mybatis.spring.annotation.MapperScan.factoryBean()

對于這個(gè)錯(cuò)誤,小編也是倍感無奈,怎么會(huì)出現(xiàn)這個(gè)錯(cuò)誤呢,看一下我的依賴有沒有錯(cuò)誤:

    compile(project(":spring-context"))
//    compile(project(":spring-instrument"))
    // https://mvnrepository.com/artifact/cglib/cglib
    compile group: 'cglib', name: 'cglib', version: '2.2.2'
    // https://mvnrepository.com/artifact/mysql/mysql-connector-java
    compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.21'
    // https://mvnrepository.com/artifact/org.mybatis/mybatis
    compile group: 'org.mybatis', name: 'mybatis', version: '3.5.2'
    // https://mvnrepository.com/artifact/org.mybatis/mybatis-spring
    compile group: 'org.mybatis', name: 'mybatis-spring', version: '2.0.2'

完全沒得毛病呀,他媽的,究竟是哪里出現(xiàn)了問題呢,小編這時(shí)將SpringFramework 源碼從github 上clone 下來了,導(dǎo)入idea 開始尋找問題所在。。。

問題根源

經(jīng)過不懈的努力,小編終于找到了問題根源,在AnnotationsScanner 類中的這個(gè)方法:

static Annotation[] getDeclaredAnnotations(AnnotatedElement source, boolean defensive) {
  boolean cached = false;
  Annotation[] annotations = declaredAnnotationCache.get(source);
  if (annotations != null) {
   cached = true;
  }
  else {
   // 使用@MapperScan 的時(shí)候會(huì)報(bào)錯(cuò),引入spring-jdbc 即可
   // 具體原因暫時(shí)還不清楚
   // Invalid default: public abstract java.lang.Class org.mybatis.spring.annotation.MapperScan.factoryBean()
   annotations = source.getDeclaredAnnotations();
   if (annotations.length != 0) {
    boolean allIgnored = true;
    for (int i = 0; i < annotations.length; i++) {
     Annotation annotation = annotations[i];
     if (isIgnorable(annotation.annotationType()) ||
       !AttributeMethods.forAnnotationType(annotation.annotationType()).isValid(annotation)) {
      annotations[i] = null;
     }
     else {
      allIgnored = false;
     }
    }
    annotations = (allIgnored ? NO_ANNOTATIONS : annotations);
    if (source instanceof Class || source instanceof Member) {
     declaredAnnotationCache.put(source, annotations);
     cached = true;
    }
   }
  }
  if (!defensive || annotations.length == 0 || !cached) {
   return annotations;
  }
  return annotations.clone();
 }

AnnotatedElement 對于這個(gè)類,小編也是不太清楚,這時(shí)也倍感無奈,這個(gè)方法主要做的事情就是將Appconfig 配置類中的注解掃描下來,那會(huì)不會(huì)是注解的問題呢,在@MapperScan 注解的注釋中發(fā)現(xiàn)小編的代碼與MyBatis-Spring 開發(fā)團(tuán)隊(duì)提供的實(shí)例代碼一致,這就讓人想不明白了:

 * <pre class="code">
 * &#064;Configuration
 * &#064;MapperScan("org.mybatis.spring.sample.mapper")
 * public class AppConfig {
 *
 *   &#064;Bean
 *   public DataSource dataSource() {
 *     return new EmbeddedDatabaseBuilder().addScript("schema.sql").build();
 *   }
 *
 *   &#064;Bean
 *   public DataSourceTransactionManager transactionManager() {
 *     return new DataSourceTransactionManager(dataSource());
 *   }
 *
 *   &#064;Bean
 *   public SqlSessionFactory sqlSessionFactory() throws Exception {
 *     SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
 *     sessionFactory.setDataSource(dataSource());
 *     return sessionFactory.getObject();
 *   }
 * }
 * </pre>

問題追溯

我這個(gè)時(shí)候被起瘋了都,從GitHub 上由把mybatis-spring 的源碼clone 了下來,導(dǎo)入idea,首先看一下mybatis-spring 的依賴:

 <dependencies>
    <!-- Compile dependencies -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.batch</groupId>
      <artifactId>spring-batch-infrastructure</artifactId>
      <version>${spring-batch.version}</version>
      <scope>provided</scope>
    </dependency>

從依賴中看到了什么,tmd,<scope>provided</scope>,這個(gè)怎么講,太無語了,其中它引入了spring-jdbc 的依賴。想象一下,@MapperScan 注解中是不是也使用到了spring-jdbc 的類,然后在使用@MapperScan 的時(shí)候沒有加入spring-jdbc 的依賴,導(dǎo)致注解在掃描期間的錯(cuò)誤,沒毛病解釋的通,找一下@MapperScan 中是否使用到了spring-jdbc 的依賴。

問題解決

果不其然,下面用一張圖來看吧。

所以呢,在項(xiàng)目中加入spring-jdbc 完美解決。

SpringBoot  @MapperScan的注意事項(xiàng)

錯(cuò)誤代碼如下:

[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (tk.mybatis.mapper.provider.base.BaseSelectProvider.dynamicSQL). Cause: java.lang.InstantiationException: tk.mybatis.mapper.provider.base.BaseSelectProvider] with root cause

檢查@MapperScan導(dǎo)入的包是否為

import tk.mybatis.spring.annotation.MapperScan;

切記不要導(dǎo)成

import org.mybatis.spring.annotation.MapperScan

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Intellij idea下使用不同tomcat編譯maven項(xiàng)目的服務(wù)器路徑方法詳解

    Intellij idea下使用不同tomcat編譯maven項(xiàng)目的服務(wù)器路徑方法詳解

    今天小編就為大家分享一篇關(guān)于Intellij idea下使用不同tomcat編譯maven項(xiàng)目的服務(wù)器路徑方法詳解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Hadoop運(yùn)行時(shí)遇到j(luò)ava.io.FileNotFoundException錯(cuò)誤的解決方法

    Hadoop運(yùn)行時(shí)遇到j(luò)ava.io.FileNotFoundException錯(cuò)誤的解決方法

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識(shí),文章圍繞著Hadoop運(yùn)行時(shí)遇到j(luò)ava.io.FileNotFoundException錯(cuò)誤展開,文中有非常詳細(xì)的解決方法,需要的朋友可以參考下
    2021-06-06
  • Mybatis中的resultType和resultMap查詢操作實(shí)例詳解

    Mybatis中的resultType和resultMap查詢操作實(shí)例詳解

    resultType是直接表示返回類型的,而resultMap則是對外部ResultMap的引用,resultMap解決復(fù)雜查詢是的映射問題。這篇文章主要介紹了Mybatis中的resultType和resultMap查詢操作實(shí)例詳解,需要的朋友可以參考下
    2016-09-09
  • springboot?vue接口測試HutoolUtil?TreeUtil處理樹形結(jié)構(gòu)

    springboot?vue接口測試HutoolUtil?TreeUtil處理樹形結(jié)構(gòu)

    這篇文章主要介紹了springboot?vue接口測試HutoolUtil?TreeUtil處理樹形結(jié)構(gòu),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Java請求轉(zhuǎn)發(fā)和請求重定向區(qū)別詳解

    Java請求轉(zhuǎn)發(fā)和請求重定向區(qū)別詳解

    這篇文章主要介紹了Java請求轉(zhuǎn)發(fā)和請求重定向區(qū)別詳解,請求轉(zhuǎn)發(fā)和請求重定向,但二者是完全不同的,所以我們今天就來盤他們的區(qū)別介紹,需要的朋友可以參考一下
    2022-07-07
  • Java中靜態(tài)代理的使用與原理詳解

    Java中靜態(tài)代理的使用與原理詳解

    這篇文章主要介紹了Java中靜態(tài)代理的使用與原理詳解,代理模式是為一個(gè)對象提供一個(gè)替身,以控制對這個(gè)對象的訪問,即通過代理對象訪問目標(biāo)對象.這樣做的好處是:可以在目標(biāo)對象實(shí)現(xiàn)的基礎(chǔ)上,增強(qiáng)額外的功能操作,即擴(kuò)展目標(biāo)對象的功能,需要的朋友可以參考下
    2023-09-09
  • 完美解決SpringCloud-OpenFeign使用okhttp替換不生效問題

    完美解決SpringCloud-OpenFeign使用okhttp替換不生效問題

    這篇文章主要介紹了完美解決SpringCloud-OpenFeign使用okhttp替換不生效問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java 對文件夾目錄進(jìn)行深度遍歷實(shí)例代碼

    java 對文件夾目錄進(jìn)行深度遍歷實(shí)例代碼

    這篇文章主要介紹了java 對文件夾目錄進(jìn)行深度遍歷實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Java實(shí)現(xiàn)SHA1加密代碼實(shí)例

    Java實(shí)現(xiàn)SHA1加密代碼實(shí)例

    這篇文章給大家分享了Java實(shí)現(xiàn)SHA1加密的相關(guān)實(shí)例代碼,有興趣的朋友可以測試參考下。
    2018-07-07
  • java 對稱二叉樹的判斷

    java 對稱二叉樹的判斷

    這篇文章主要介紹了java 對稱二叉樹的判斷,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02

最新評(píng)論

兰坪| 淄博市| 德安县| 栾城县| 静乐县| 玉溪市| 宜川县| 依安县| 习水县| 获嘉县| 达州市| 潍坊市| 宝山区| 临朐县| 洪洞县| 永登县| 宜章县| 阿坝县| 信丰县| 麻阳| 海林市| 尼勒克县| 聊城市| 电白县| 新乡县| 乳源| 许昌县| 清徐县| 苗栗县| 内乡县| 巩义市| 通许县| 连江县| 岳池县| 游戏| 林芝县| 故城县| 英山县| 南华县| 满洲里市| 拜城县|