服务器启动时报错如下:
Annotation-specified bean name ‘userMapper’ for bean class [com.promote.website.mapper.UserMapper] conflicts with existing, non-compatible bean definition of same name and class [com.promote.user.mapper.UserMapper]
谷歌翻译:
Bean类[com.promote.website.mapper.UserMapper]的注释指定的Bean名称’userMapper’与同名和类[com.promote.user.mapper.UserMapper]的现有,不兼容的Bean定义冲突
Spring 容器开启注解扫描后,在服务器启动时会扫描所有符合配置条件的包下的bean,创建并管理 bean 对象,出现上述错误主要是 Spring 容器里面的 bean 名字重复了。
Spring并不支持不同包下的类名相同的设定。这是因为默认的Spring检索Bean的唯一id(@Service,@Component等注解中的name属性)为类名(Class Name),并不包含包名(Package Name)的信息。
解决方法:
- 直接修改相同 bean 的类名,错误信息中有提示是哪个bean 重复。
- 注解扫描时可以将路径细化。