spring一个接口多个实现类的注入 和 使用配置文件控制的场景

本文深入探讨了Spring框架中如何在存在多个实现类时精确注入所需类的方法,包括使用@Autowired+@Qualifier和@Resource注解,以及通过配置文件和@ConditionalOnProperty注解控制不同条件下注入不同实现类的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.一个接口多个实现类怎么确定注入的是哪个?

方法1@Autowired+@Qualifier(name=“spring管理的实现类名称”)

spring管理的实现类名称 = 类全名,首字母小写
例如 类名叫做Test,那么name=“test”

//    @Autowired
//    @Qualifier("serviceImpl1")
//    ISerivce service1;
方法2 @Resource(name = “spring管理的实现类名称”)
//    @Resource(name = "serviceImpl2")
//    ISerivce service2;

2.交给配置文件管理的方式

方法1

@Configuration  //为配置类
public class RedisConfig {
    @Bean   //向spring注册bean  类似于@service的注解
    @Qualifier("iRedis")
    @ConditionalOnProperty(name = "redisFlag", havingValue = "true") //由配置文件操控
    public IRedis getRedis1() {
        return new RedisImp1();
    }

    @Bean
    @Qualifier("iRedis")
    @ConditionalOnProperty(name = "redisFlag", havingValue = "false")
    public IRedis getRedis2() {
        return new RedisImp2();
    }
}

方法二 惊奇的发现,使用 @ConditionalOnProperty+@Configuration注解的时候,竟然能够也注入serivce

@Configuration
@ConditionalOnProperty(name = "redisFlag", havingValue = "true")
public class RedisImp1 implements IRedis {

}

看源码才发现
@Configuration 内部也是用了 @Component 这个注解,怪不得呢

参考博客

spring 当接口存在多个实现类的时候注入到同一个类时选择想要的实现来注入
https://blog.youkuaiyun.com/qq_33212500/article/details/82993087
配置Spring Boot通过@ConditionalOnProperty来控制Configuration是否生效

https://blog.youkuaiyun.com/dalangzhonghangxing/article/details/78420057

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值