解决:Spring启动时注入失败

在Spring启动时会帮我们自动装配一些组件,依赖注入,此时如果项目中自己定义的类名有相同的,或者自己定义的类名与引入的第三方包有相同的,就会引发冲突,原因是Spring在帮我们管理这些Bean时不知道使用的到底是哪一个,就会在启动时报错

常见异常:

Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException

Action:
Consider renaming one of the beans or enabling overriding by setting

… …

 

解决

方式一:

注入时在类上指定名称,如:@Service(value = “testExcludeClass”),再按名称进行注入

@Autowired
@Qualifier(name = "testExcludeClass")
private TestExcludeClass testExcludeClass;
@Resource(name = "testExcludeClass")
private TestExcludeClass testExcludeClass;

 

方式二:

在配置类的方法上使用@Bean和@Primary,指定优先使用该Bean注入,注意在主启动类配置@ComponentScan注解,指明扫描哪些包或类

@Configuration
public class Config {
    @Bean
    @Primary
    public DataSourceProxy dataSourceProxy(DruidDataSource dataSource) {
        return new DataSourceProxy(dataSource);
    }
}
// 扫描包
@ComponentScan(basePackages = {"com.bwone.demo"})
// 扫描类
@ComponentScan(basePackageClasses= {com.bwone.demo.Config.class})

 

方式三:

在主启动类的@SpringBootApplication注解上使用exclude属性,指明启动时自动装配排除哪些包或类

@SpringBootApplication(exclude = "com.bwone.demo.TestExcludeClass")

 

方式四:

YML配置文件设置属性

spring:
  # 后发现的bean会覆盖先发现的bean
  main:
    allow-bean-definition-overriding: true

 

方式五:

可能由于Jar包冲突导致,检查是否引入相同的Jar包

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值