您好,登錄后才能下訂單哦!
這篇文章主要介紹“spring注解在自定義jar包中無法被掃描的問題如何解決”,在日常操作中,相信很多人在spring注解在自定義jar包中無法被掃描的問題如何解決問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”spring注解在自定義jar包中無法被掃描的問題如何解決”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
前兩天,一朋友在開發(fā)的時候遇到了一個問題向我求助, service服務(wù)為第三方提供的服務(wù)里面有spring注解并將service 打成jar包中,使用maven引入。
報錯信息
這類問題在開發(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)引入且可以加載到虛擬機(jī)中
使用配置文件注解加入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的注解。
到此,關(guān)于“spring注解在自定義jar包中無法被掃描的問題如何解決”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。