最近工作时遇到一个bug
项目使用springboot,在使用SpringContextHloder,getBean( ) ;时报错:No qualifying bean of type ‘xxx’ available
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.web.xxxx.service.XxxxxxService' available
一般此错误表示没有可用的bean,仔细查看了代码确保此类存在且正确注入到Spring中
Controller:
public Map loadForm(String round,String instanceId) {
//出错位置
// SpringContextHolder.getBean(XxxxxxService.class);为自定义封装的方法,从spring容器中获取bean
XxxxxxService xxxxxxService= SpringContextHolder.getBean(XxxxxxService.class);
}
Service:
@Service
@Transactional(readOnly = true)
public class XxxxxxServiceextends CrudService<XxxxxxDao, Xxxxxx> {
public Xxxxxx getById(Map map){
return dao.getById(map);
}
经过几个小时的摸索,最后在网上找到资料,是因为使用了DevTools热部署插件,导致程序启动时使用的是DevTools热部署插件重写的ClassLoader,而不是Java默认的ClassLoader,因此可能会导致某些类无法正确加载,从而导致无法获取bean。
解决方案:
不使用热部署插件,即可解决该报错
博客园的搬家ID,不用理会(2dfef1bd-fa97-4f94-8c2c-eb808c3eaf47)
参考文章:
https://my.oschina.net/u/4298243/blog/3398192