当前位置: 首页 > article >正文

Spring学习笔记_17——@Primary

@Primary

1. 介绍

@Primary 注解是Spring框架提供的一个注解,用于在存在多个相同类型的bean时指定首选或主要的bean。当Spring容器需要自动注入某个类型且有多个候选者时,它会优先选择带有@Primary注解的bean。

2. 场景

如果依赖的对象存在多个类型相同的Bean时,使用@Autowired注解已经无法正确完成Bean的装配工作。此时,可以使用@Qualifier注解明确指定要装配的Bean对象。也可以使用@Primary注解优先装配对应的Bean对象。

3. 源码

 /*
 * @author Chris Beams
 * @author Juergen Hoeller
 * @since 3.0
 * @see Lazy
 * @see Bean
 * @see ComponentScan
 * @see org.springframework.stereotype.Component
 */
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Primary {
}

4. Demo

  • 创建DAO层接口
public interface DemoDAO {
}
  • 创建接口的第一个实现类
public class DemoDAOImpl1 implements DemoDAO {
}
  • 创建接口的第二个实现类
public class DemoDAOImpl2 implements DemoDAO {
}
  • 在配置类中指定DemoDAO实现的优先级
@Configuration
public class DemoConfig {
    @Bean
    @Primary
    public DemoDAO primaryDemo1() {
        return new DemoDAOImpl1();
    }

    @Bean
   public DemoDAO primaryDemo2() {
        return new DemoDAOImpl2();
   }

}
  • 在Service层使用下
@Service
public class DemoService {
    @Autowired
    private DemoDAO demoDAO;

    @Autowired
    @Qualifier("primaryDemo2")
    private DemoDAO demoDAO2;

    @Override
    public String toString() {
        return "DemoService{" +
                "demoDao=" + demoDao + "demoDao2=" + demoDao +
                '}';
    }
}

http://www.kler.cn/a/372963.html

相关文章:

  • 金和OA-C6 ApproveRemindSetExec.aspx XXE漏洞复现(CNVD-2024-40568)
  • 基于MATLAB多参数结合火焰识别系统
  • python画图|坐标轴比例设置方法
  • 34. 在排序数组中查找元素的第一个和最后一个位置
  • 从零学习大模型(十)-----剪枝基本概念
  • 建设NFS服务器并实现文件共享
  • 基于python的语音识别与蓝牙通信的温控系统毕设项目
  • 医学数据分析中的偏特征图可视化
  • 请详细介绍python三大神器:迭代器、生成器、装饰器
  • 数据结构练习题(链表)
  • 2024双11买什么东西比较好?双十一购物清单
  • 全面解读京东商品详情 API 接口:从功能到应用场景
  • 从0学习React(6)
  • k8s 1.28.2 集群部署 Thanos 对接 MinIO 实现 Prometheus 数据长期存储
  • GO语言微服务 服务注册与服务发现平台 - Nacos go sdk
  • 通过route访问Openshift上的HTTP request报错504 Gateway Time-out【已解决】
  • C#读取.ini配置文件
  • 手工方式屏蔽某一个网站
  • 利用摄像机实时接入分析平台LiteAIServer视频智能分析软件进行视频监控:过亮过暗检测算法详解
  • AHT20 HAL库驱动
  • 人工智能:开启未来之门
  • 如何分析算法的执行效率和资源消耗
  • 将本地某个commit 提交另一个分支上
  • Unity BesHttp插件修改Error log的格式
  • 数字信封原理解析:安全高效,一次一密!
  • 基于Hadoop和Hive的健康保险数据分析