项目采用的是SpringBoot+SpringMVC+mybatis
1. Bean冲突问题
Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name ‘shareService’ for bean class [com.tang.share_nice.service.ShareService] conflicts with existing, non-compatible bean definition of same name and class [com.tang.share_nice.base.service.ShareService]
- 异常释义:
上面这段报错的意思是:在不同的包下有两个同名的类,发生的同名冲突。
因为在spring将类注入到容器中时,默认是使用类名消息当做bean名的,而不是完整路径名,所以不同路径下的同名还是会引起冲突。
- 解决方法:
可以通过修改类名字,删除某个类,或者给类起一个注入时用的别名(如:@Service(name=“Sharee”))
- 特殊情况
这里讲一下我遇到的特殊情况。首先我是知道同名会冲突的。所以在我在不小心使用了同名的bean之后,将同名中的一个类删除了,但是在我启动项目调试的时候,一直再报同名冲突。全局搜索冲突的这个shareService,的确只有一个。查看target下面的编译目录,发现还是只有一个。但是在是在删除的情况下还提示重名的话肯定是之前的编译文件有缓存了,只是我不清楚在哪里。
首先我尝试rebuild之后重新启动,错误依然存在。rebuild没有解决。
然后我尝试mvn clean命令清除一下所有缓存文件,但是执行命令的时候中途失败了:java.io.IOException: Cannot delete 'E:\XXX\target\share_nice-0.0.1-SNAPSHOT'
这个错误,这个文件删除不了。于是,我找到电脑上项目所在的文件夹,手动删除了target下的所有文件,然后重新编译启动项目,成功。
2. 返回void的controller方法返回404
项目中定义了一个controller方法,方法返回值类型是void,在debug这个方法时,方法能正常执行,但是执行完毕返回到浏览器时,我以为浏览器会是一片空白,但是浏览器显示了404错误。
原因是:在controller方法返回值里, 你要么返回json形式的数据(@ResponseBody) 要么返回到一个页面 ,或者跳转到其他controller ,如果你都没有,它就会默认返回到映射名为 value的的jsp页面;
解决方法:返回一个提示,成功或者失败。