Spring-boot外掛式開發:外掛不自動生成bean報錯
阿新 • • 發佈:2021-01-25
技術標籤:spring bootspring bootjava
Spring boot plugin framework 外掛不自動生成bean報錯
文件地址
https://gitee.com/starblues/springboot-plugin-framework-parent/wikis/pages
報錯:
最近在使用上述spring boot 外掛式開發軟體時,做好新功能外掛時,報出不能建立bean的錯誤:
10:35:58.621 [main] WARN c.g.s.f.SpringBeanRegister - [register,71] - Error creating bean with name '
[email protected]': Unsatisfied dependency expressed through field 'hotelPluginService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.mybatis.plugin1.service.HotelPluginCallService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
錯誤原因:
在開發這個外掛的時候,這個外掛裡有來自其他外掛的資料,按照文件的要求,在本外掛中建立了結構做Caller接收資料
@Caller("hotelPluginService")
public interface HotelPluginCallService {
@Caller.Method("userOffline")
public List<UserOffline> selectUserOfflineList(UserOffline userOffline);
@Caller.Method("userOnline" )
public List<UserOnline> selectUserOnlineList(UserOnline userOnline);
}
在資料來源的外掛中建立類做Supplier傳送資料
@Supplier("hotelPluginService")
public class HotelPluginService {
@Autowired
IUserOfflineService userOfflineService;
@Autowired
IUserOnlineService userOnlineService;
@Supplier.Method("userOffline")
public List<UserOffline> selectUserOfflineList(UserOffline userOffline){
return userOfflineService.selectUserOfflineList(userOffline);
}
@Supplier.Method("userOnline")
public List<UserOnline> selectUserOnlineList(UserOnline userOnline) { return userOnlineService.selectUserOnlineList(userOnline); }
}
在本外掛中通過caller介面獲取資料
@Autowired
HotelPluginCallService hotelPluginService;
根據報錯,後來我發現實際上這個外掛已經成功載入bean,可仍然報錯,我去掉了@Autowired標籤後,這個報錯就消失了,可是後來發現沒有標籤後雖然不報建立bean失敗,但是資料獲取不到。
處理方法
忽略建立bean失敗的報錯,雖然他在報bean建立失敗,但是在後來測試中發現,外掛已經成功建立bean了,而且帶著@Autowired標籤資料才能正常傳輸,該報錯不影響正常功能。