最近这两天我在学习springMVC的时候,遇到了一个难以解决的问题,就是在启动tomcat的时候,控制台里老是报这一句错:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'courseController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void com.myspring.controller.CourseController.setCourseService(com.myspring.service.CourseService); nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.myspring.service.CourseService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
我上网查了好久,有的说是实现类里没有加@Service("xxx"),有的说是Controller里的set方法前面没有加@Autowired,还有其他的什么位置错了,包导入错了等等,我花了好久检查,发现都没有上述的错误,后来我想到了一个可能性,就是没有扫描到@Service标注的类,后来我改了一下,结果就问题就解决了,下面我给大家展示一下我的代码。
这是我工程的结构:
这是spring配置文件:
applicationContext.xml文件:
由此大家可以发现,我的base-package="com.myspring.controller"也就是说,我设置的扫描范围是com.myspring文件夹下的controller文件夹,但是我的服务类是放在Service文件夹里的,所以说spring在扫描的时候并没有扫描到被@Service所注解的类,因此启动项目的时候便会报上面的错误,只要把代码改成如下这个样子就可以了:
Spring配置文件:
applicationContext.xml文件:
这样的话Spring就可以扫描到所有需要扫描的类了。
我也是初学SpringMVC,可能某些方面的描述有错或者没有那么专业,不喜勿喷,请各位大神多多指教,最后,希望这篇文章能帮助到大家,谢谢~!!