在Spring boot中通過ApplicationContext獲取bean失敗

liaomingwu發表於2018-12-31

在專案中使用了一個某銀行的支付介面庫,庫中涉及到配置資訊,需要從資料庫中讀取支付配置資訊,由支付介面在呼叫的時候通過反射的方式進行呼叫。

配置類檔案是一個原始碼檔案,可以進行修改,希望在該介面中呼叫專案中的Spring管理的bean(通過Mybatis方式),從而實現資料庫訪問,讀取配置資訊。

在Spring boot中通過反射呼叫的類中通過SpringApplicationContext獲取bean失敗

原因是Springboot中使用了devtool的熱部署功能,導致使用了不同的類載入器,一個是appclassloader,一個是restartClassloader。取消熱部署配置後,可以使用了。

Java類載入器基於三個機制:委託、可見性和單一性。委託機制是指將載入一個類的請求交給父類載入器,如果這個父類載入器不能夠找到或者載入這個類,那麼再載入它。可見性的原理是子類的載入器可以看見所有的父類載入器載入的類,而父類載入器看不到子類載入器載入的類。單一性原理是指僅載入一個類一次,這是由委託機制確保子類載入器不會再次載入父類載入器載入過的類。

 

相關文章