springboot报错“The bean ‘xxx‘, defined in class path resource [xxx] has already been defined”
关于springboot中的类冲突新手
·
报错内容大概如下
原因:往spring容器中的重复注入了【xxx】bean类
很多网上的搜索都是说jar包或依赖冲突,这里主要不说这个类型
很多时候对新手来说也可能是多次注入
比如:
定义了一个service类
@Service
public class CustomWebSocketHandler extends TextWebSocketHandler implements WebSocketHandler { }
引用时
@Bean
// 此处不需要用@Bean注解,因为CustomWebSocketHandler类已经存在@Service注解,已经放入了spring容器
public WebSocketHandler customWebSocketHandler() {
return new CustomWebSocketHandler();
}
包括的其他类型还有比如:@Component 、@Controller等注解其实都是往spring容器中注入了类,所以在引用时千万不要再添加其它会注入容器的注解。
那假如是jar包冲突,那就应该在maven依赖或者gradle依赖中去除相关冲突依赖
在maven依赖中去除相关的包使用exclusions
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
在gradle中使用exclude
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
更多推荐
已为社区贡献1条内容
所有评论(0)