You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot依赖注入标注@Primary后如何获取同接口其他实现类实例

问题解答

Spring 框架本身没有内置 @Secondary 这类注解,你可以通过以下两种常用方案实现「优先查缓存、未命中再查 MongoDB」的逻辑:

  • 方案1:在CacheRepo中直接注入MongoDBRepo(更推荐)
    这种方式把缓存降级的逻辑封装在仓库层内部,业务侧无需感知底层调用逻辑,符合单一职责原则。
    修正后的CacheRepo代码示例:

    @Primary
    @Component
    public class CacheRepo implements Repository {
        // 直接注入MongoDBRepo实例,或者也可以通过@Qualifier指定bean名称注入Repository类型实例
        private final MongoDBRepo mongoDBRepo;
    
        // Spring会自动装配MongoDBRepo实例
        public CacheRepo(MongoDBRepo mongoDBRepo) {
            this.mongoDBRepo = mongoDBRepo;
        }
    
        // 示例查询方法
        public Data queryById(String dataId) {
            // 第一步:查询缓存
            Data cacheResult = getFromCache(dataId);
            if (cacheResult != null) {
                return cacheResult;
            }
            // 第二步:缓存未命中,查询MongoDB
            Data dbResult = mongoDBRepo.queryById(dataId);
            // 可选逻辑:将DB查询结果回写缓存
            writeToCache(dataId, dbResult);
            return dbResult;
        }
        
        // 缓存读写方法省略实现
        private Data getFromCache(String dataId) {}
        private void writeToCache(String dataId, Data data) {}
    }
    
  • 方案2:在业务服务中同时注入两个Repository实例
    如果你希望把路由逻辑放在业务层控制,可以通过@Qualifier注解指定注入的bean名称,来获取MongoDBRepo的实例:
    业务服务代码示例:

    @Service
    public class BusinessService {
        // CacheRepo加了@Primary,默认注入的是CacheRepo实例
        private final Repository cacheRepo;
        // 通过@Qualifier指定bean名称注入MongoDBRepo,Spring默认bean命名规则是类名首字母小写,即mongoDBRepo
        private final Repository mongoRepo;
    
        public BusinessService(Repository cacheRepo, @Qualifier("mongoDBRepo") Repository mongoRepo) {
            this.cacheRepo = cacheRepo;
            this.mongoRepo = mongoRepo;
        }
    
        public Data doBusinessQuery(String dataId) {
            Data result = cacheRepo.queryById(dataId);
            if (result == null) {
                result = mongoRepo.queryById(dataId);
            }
            return result;
        }
    }
    

内容的提问来源于stack exchange,提问作者Drex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:39:01