1. 程式人生 > 其它 >Spring-boot外掛式開發:外掛不自動生成bean報錯

Spring-boot外掛式開發:外掛不自動生成bean報錯

技術標籤: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標籤資料才能正常傳輸,該報錯不影響正常功能。