最近工作时遇到一个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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐