今天写代码时刚写完数据库一个实体对应的方法,准备测试,如下图所示。
执行之后报错。于是查看报错原因,报错显示:org.springframework.beans.factory.NoSuchBeanDefinitionException。
去网上小查一番发现,大部分的方案是让你检查单词拼写。
如果注解()内没有给实体类特殊命名,就是类名首字母小写。或者说没有写注解,或者没有在xml配置bean对象就会造成找不到对象的问题。于是乎查看了一下类,发现该类是写了注解,并且我在其他类中都能对其自动装载,如下图所示。
对应的类
引用的类
后面看着这报错,看来只能是拼写出错了,突然灵光一现,仔细一看,我的getbean方法后面对应的是接口类,不是接口实现类,难怪找不到对象,更改后再试试果然成功,去网上查看相关内容,果然后面得写带注解的那个类而不是接口类。可谓是基础不牢,地动山摇啊。但是有个细节需要注意。bean如果实现了接口,getBean的返回值要用接口来接收,不能直接用实现类,否则可能报:java.lang.ClassCastException: com.sun.proxy.$Proxy9 cannot be cast
再次测试,成功。
结论:
检查拼写问题,一般为类名首字母小写
其次检查是否对该类添加了@Component,@Service,@Repository,@Controller。或者对其是否再xml中进行了bean的相关配置
如果使用了接口的话,getbean内为实际的接口实现类,但是注意,需要将其转化为接口类型,否则后续可能会产生其他错误(例如:java.lang.ClassCastException)