No qualifying bean of type xxx' available 的一種解決方法


獲取bean

 Class beanClass = Class.forName(event.className);
 FilterEvent filterEvent = (FilterEvent)BeansContext.getWebApplicationContext().getBean(beanClass);

event.className為要獲取的類名

1 反復檢查類名是否正確    ok

2 檢查包掃描配置是否正確  ok

3 檢查bean 是否已注冊  ok  檢查之后確認bean沒有問題

@Service
public class GDXMMXExtendEx implements FilterEvent {

    @PostConstruct
    public void init(){
        System.out.println("==============?");
    }

}

4 在代碼其他地方獲取bean  ok

5 對比能獲取到bean 與不能獲取到bean 時的差異 發現

beanClass上的classloader 不一致
能獲取到bean的classloader 為RestartClassLoader
不能獲取到bean的classloader 為AppClassLoader

  查詢classloader的區別 發現 devtools 可能會影響classloader

  去掉這個插件 一切正常了

 <!--   <dependencies>-->
<!--        <dependency>-->
<!--            <groupId>org.springframework.boot</groupId>-->
<!--            <artifactId>spring-boot-devtools</artifactId>-->
<!--            <optional>true</optional>-->
<!--        </dependency>-->
<!--    </dependencies>

 

 

補充:20191217

 

打包的時候將文件屏蔽掉了

我的bean 叫FIAPITestService  下面這個排除剛好排除掉

<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>application.yaml</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<excludes>
<exclude>ApplicationTest.class</exclude>
<exclude>**/*Test*.class</exclude>
<exclude>**/static/**</exclude>
<exclude>**/**/*.yaml</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>

 

 

 

參考:

https://blog.csdn.net/qq_36285899/article/details/82867768


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM