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

spring注解在自定義jar包中無法被掃描的解決方案

 更新時間:2021年08月03日 12:01:53   作者:John_Phil  
這篇文章主要介紹了spring注解在自定義jar包中無法被掃描的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

spring注解在自定義jar包中無法被掃描

前兩天,一朋友在開發(fā)的時候遇到了一個問題向我求助, service服務(wù)為第三方提供的服務(wù)里面有spring注解并將service 打成jar包中,使用maven引入。

使用new可以創(chuàng)建,但是使用autowire無法注入提示信息如下圖

報錯信息

這類問題在開發(fā)中一直是我們最不愿意看到的,乍一看,感覺挺對,還挺有道理。但是就是更想要的結(jié)果對不上。

我當(dāng)時給出的判斷autowire的類重名導(dǎo)致注入失敗,建議用配合使用qualifier或者 使用resource 但是發(fā)現(xiàn)不是這個錯誤。

于是我為了還原錯誤問題花了兩個小時終于找到了問題出現(xiàn)的原因,以及解決辦法。

首先出現(xiàn) spring注解在jar包中無法被掃描問題 的出現(xiàn)是 使用eclipse 導(dǎo)出jar包時 選擇Add directory entries

打jar包時應(yīng)選擇add directory entries

原因我來解釋一下

首先我最先找到解決辦法是 當(dāng)我們使用 @configuration 加上bean時可以正常注入 說明包已經(jīng)引入且可以加載到虛擬機中

使用配置文件注解加入jar包對象bean

而使用@autowire無法實現(xiàn)注入說明在 遍歷對應(yīng)類時在對應(yīng)的路徑下無法找到對應(yīng)的類

因為如果不選擇Add directory entries 這種默認(rèn)方式生成的jar包中,只含有class文件,而并沒有我們所知的文件夾目錄結(jié)構(gòu)??赡芪覀兇蠖鄶?shù)人認(rèn)為com.neusoft.service.HelloService類,HelloService類文件就應(yīng)該在service文件夾下的文件夾里,這其實是錯誤的看法

com.neusoft.service真正的含義是package包域名,跟文件夾目錄層次結(jié)構(gòu)是兩回事,我們只是習(xí)慣上用文件夾目錄來展示package而已。但package卻不一定非要用過文件夾目錄來展示。

我們可以用下面這段代碼來進一步說明這個問題

將service打成jar包 不選擇Add directory entries

并使用maven命令將 jar包放入本地庫中

mvn install:install-file -Dfile=F:\temp\add\aaa.jar -DgroupId=aaa -DartifactId=noaaa-jar -Dversion=1.0 -Dpackaging=jar

no add diretory entries jar

使用java遍歷

    @Test
    public void test() {
        // 項目中jar包所在物理路徑
                String jarName = "E:\\maven-repository\\aaa\\noaaa-jar\\1.0\\noaaa-jar-1.0.jar";
                JarFile jarFile;
                try {
                        jarFile = new JarFile(jarName);
                
                    Enumeration<JarEntry> entrys = jarFile.entries();
                    while (entrys.hasMoreElements()) {
                        JarEntry jarEntry = entrys.nextElement();
                        System.out.println(jarEntry.getName());
                    }       
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
   
    }

遍歷結(jié)果

將service打成jar包 選擇Add directory entries 添加到maven本地倉儲中

命令:

mvn install:install-file
  • -DgroupId=包名
  • -DartifactId=項目名
  • -Dversion=版本號
  • -Dpackaging=jar
  • -Dfile=jar文件所在路徑(我這里使用的是絕對路徑)
mvn install:install-file -Dfile=F:\temp\add\aaa.jar -DgroupId=aaa -DartifactId=aaa-jar -Dversion=1.0 -Dpackaging=jar

add diretory entries jar

使用java遍歷

    @Test
    public void test() {
        // 項目中jar包所在物理路徑
                String jarName = "E:\\maven-repository\\aaa\\aaa-jar\\1.0\\aaa-jar-1.0.jar";
                JarFile jarFile;
                try {
                        jarFile = new JarFile(jarName);
                
                    Enumeration<JarEntry> entrys = jarFile.entries();
                    while (entrys.hasMoreElements()) {
                        JarEntry jarEntry = entrys.nextElement();
                        System.out.println(jarEntry.getName());
                    }       
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
   
    }

遍歷結(jié)果

META-INF/MANIFEST.MF

com/

com/neusoft/

com/neusoft/service/

com/neusoft/service/HelloService.class

發(fā)現(xiàn)加上Add directory entries 有目錄 而不加只有對應(yīng)class類。 這也就解釋了為什么無法加載spring的注解。

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

相關(guān)文章

  • Java大數(shù)據(jù)處理的核心技術(shù)MapReduce框架

    Java大數(shù)據(jù)處理的核心技術(shù)MapReduce框架

    MapReduce是一種分布式計算框架,適用于大規(guī)模的數(shù)據(jù)處理。它將大數(shù)據(jù)分成多個小數(shù)據(jù)塊,通過Map和Reduce兩個階段對數(shù)據(jù)進行處理和分析。MapReduce框架具有可靠、高效、可擴展等特點,已經(jīng)成為大數(shù)據(jù)處理的核心技術(shù)
    2023-05-05
  • Java包裝類的緩存機制原理實例詳解

    Java包裝類的緩存機制原理實例詳解

    這篇文章主要介紹了Java包裝類的緩存機制原理實例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot實現(xiàn)kafka多源配置的示例代碼

    SpringBoot實現(xiàn)kafka多源配置的示例代碼

    實際開發(fā)中,不同的topic可能來自不同的集群,所以就需要配置不同的kafka數(shù)據(jù)源,基于springboot自動配置的思想,最終通過配置文件的配置,自動生成生產(chǎn)者及消費者的配置,本文介紹了SpringBoot實現(xiàn)kafka多源配置,需要的朋友可以參考下
    2024-06-06
  • JVM如何處理異常深入詳解

    JVM如何處理異常深入詳解

    異常處理的兩大元素:拋出異常、捕獲異常,非正常處理的兩個方法。下面這篇文章主要給大家介紹了關(guān)于JVM如何處理異常的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2019-01-01
  • springMVC中@RequestParam和@RequestPart的區(qū)別

    springMVC中@RequestParam和@RequestPart的區(qū)別

    本文主要介紹了springMVC中@RequestParam和@RequestPart的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • Java Spring注解之@Async的基本用法和示例

    Java Spring注解之@Async的基本用法和示例

    Spring為任務(wù)調(diào)度與異步方法執(zhí)行提供了注解支持,通過在方法上設(shè)置@Async注解,可使得方法被異步調(diào)用,下面這篇文章主要給大家介紹了關(guān)于Java Spring注解之@Async的基本用法和示例,需要的朋友可以參考下
    2022-03-03
  • Spring里的Async注解實現(xiàn)異步操作的方法步驟

    Spring里的Async注解實現(xiàn)異步操作的方法步驟

    這篇文章主要介紹了Spring里的Async注解實現(xiàn)異步操作的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Spring AOP有多少個通知以及它們的執(zhí)行順序介紹

    Spring AOP有多少個通知以及它們的執(zhí)行順序介紹

    這篇文章主要介紹了Spring AOP有多少個通知以及它們的執(zhí)行順序,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java程序打印奧林匹克標(biāo)志方法詳解

    Java程序打印奧林匹克標(biāo)志方法詳解

    這篇文章主要介紹了Java程序打印奧林匹克標(biāo)志方法詳解,需要的朋友可以參考下。
    2017-09-09
  • Spring MVC 攔截器實現(xiàn)代碼

    Spring MVC 攔截器實現(xiàn)代碼

    本篇文章主要介紹了Spring MVC 攔截器的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02

最新評論