NoSuchBeanDefinitionException: No qualifying bean of type ......... 或者NoSuchMethod、NoSuchElement

2年前 (2022) 程序员胖胖胖虎阿
169 0 0

项目启动报错以下情况:

ava.lang.NoSuchMethodException
java.lang.NoSuchMethodError
java.lang.NoSuchElementException
NoSuchBeanDefinitionException

通用的解决思路

1、有这个类,有这个方法,但是没有交给spring进行管理。
这种情况最常见,一般都是类没有交给Spring IOC进行管理或者调用的时候没有注入。

2、有这个类,而且有好几个,他们之间发生了冲突。
如果这个类指向的是maven第三方依赖,大概率是因为maven包冲突了。

例如问题:

nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.aliexpress.fileserver.tool.security.SecurityTool' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1631)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)

No qualifying bean of type ‘com.aliexpress.fileserver.tool.security.SecurityTool’ available:
指向的是com.aliexpress.fileserver包下的依赖。本地并没有SecurityTool,只有依赖的包里面存在。

解决思路:
找到冲突的包给exclude掉。
由于可能依赖了第三方的maven包,排查起来比较困难,可以使用插件Maven Helper
idea 安装使用即可。
找到对应的包排出掉就好了
NoSuchBeanDefinitionException: No qualifying bean of type ......... 或者NoSuchMethod、NoSuchElement
移除某一个

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>lazada-item-health-center-ns-client</artifactId>
            <version>1.0.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>cglib-nodep</artifactId>
                    <groupId>cglib</groupId>
                </exclusion>
            </exclusions>
        </dependency>

移除全部写法:

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>lazada-item-health-center-ns-client</artifactId>
            <version>1.0.1</version>
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

相关文章

暂无评论

暂无评论...