【spring】@Primary注解学习

@Primary介绍

@Primary 是 Spring 框架中的一个注解,用于在多个相同类型的 bean 中指定一个默认的 bean。当 Spring 容器在自动装配时遇到类型冲突,即存在多个相同类型的 bean 时,如果没有使用 @Qualifier 或其他方式指定具体的 bean,Spring 会自动选择标记有 @Primary 的 bean 进行注入。

@Primary源码

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Primary {

}
源代码截图

@Primary属性介绍

没有属性,哈哈!!

@Primary注解使用场景

  1. 默认 bean 选择:当 Spring 容器中有多个相同类型的 bean 时,如果不指定具体的 bean,Spring 在自动装配时可能会因为歧义而无法确定应该注入哪个 bean。使用 @Primary 可以指定一个 bean 作为默认选择,这样在没有其他指定的情况下,Spring 会自动注入这个 bean。

  2. 简化配置:在某些情况下,你可能希望在多个相同类型的 bean 中指定一个默认的 bean,以便在大多数情况下不需要显式指定 bean。使用 @Primary 可以简化配置,减少代码的复杂性。

  3. 与 @Qualifier 结合使用:在某些情况下,你可能希望在多个相同类型的 bean 中指定一个默认的 bean,但在某些特殊情况下需要使用其他 bean。使用 @Primary 可以指定一个默认的 bean,而在特殊情况下使用 @Qualifier 来指定具体的 bean。

  4. 在配置类中使用:除了在 bean 的属性或构造函数上使用 @Primary,你还可以在配置类中使用 @Primary 来指定 bean 的名称或限定符,以便在其他 bean 中使用。

  5. 与 @Component@Service@Repository 等注解结合使用:在定义 bean 时,可以使用 @Primary 来指定一个 bean 作为默认选择,以便在其他 bean 中使用。

  6. 在 @Bean 注解中使用:在 @Configuration 类中,你可以使用 @Bean 注解来定义 bean,并使用 @Primary 来指定 bean 作为默认选择,以便在其他 bean 中使用。

@Primary测试示例代码

示例代码 一:多个实现类的自动装配
@Service
public class DefaultEmailSender implements EmailSender {
    // ...
}

@Service
public class SmsEmailSender implements EmailSender {
    // ...
}

@Configuration
public class AppConfig {
    @Bean
    @Primary
    public EmailSender emailSender() {
        return new DefaultEmailSender();
    }

    @Bean
    public EmailSender smsEmailSender() {
        return new SmsEmailSender();
    }
}
示例代码 二:配置类中的方法注入
@Configuration
public class WebConfig {
    @Bean
    public WebService webService() {
        return new WebService();
    }

    @Bean
    @Primary
    public SecureWebService secureWebService() {
        return new SecureWebService();
    }
}
示例代码 三:优先级链的使用
@Service
@Profile("dev")
public class DevNotificationService implements NotificationService {
    // ...
}

@Service
@Primary
@Profile("prod")
public class ProdNotificationService implements NotificationService {
    // ...
}

在这个例子中,DevNotificationService将在开发环境(dev profile)中作为首选,而ProdNotificationService将在生产环境(prod profile)中作为首选。




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/500762.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI计算平台设计方案:901-基于3U VPX的图像数据AI计算平台

一、产品概述 设备基于3U VPX的导冷结构,集成FPGA接口预处理卡,GPU板卡、飞腾ARM处理卡,实现光纤、差分电口或者Camera link的图像接入,FPGA信号预处理,GPU AI计算,飞腾ARM的采集管理存储。 二、系统…

Linux基础命令篇:操作系统服务管理(systemctl service)

Linux基础命令篇:操作系统服务管理(systemctl & service) service和systemctl是两个用于管理Linux系统服务的命令。它们分别属于SysV init和systemd系统,这两个系统是Linux中用于初始化和管理服务的不同框架。在许多现代Linux…

visual studio报:引发的异常:“System.DllNotFoundException”(位于 ConsoleCAN1.exe 中)

最近在重构CAN通信的代码,把论文中的java转为C#实现,由于某种原因,java不能复现,所以转为c#。 然而c#的重构过程遇到许多问题,因为两种语言的编程方式、线程等等实现上有所差异。 其中一个错误: 引发的异…

绿联 安装PDF工具

这是一个强大的本地托管的基于 Web 的 PDF 操作工具,使用 docker,允许您对 PDF 文件执行各种操作,例如拆分、合并、转换、重组、添加图像、旋转、压缩等。这个本地托管的 Web 应用程序最初是 100% ChatGPT 制作的应用程序,现已发展…

什么是搜索引擎(SEO)爬虫它们是如何工作的?

什么是搜索引擎(SEO)爬虫&它们是如何工作的? 你的网站上有蜘蛛🕷️。别抓狂!我说的不是真正的八条腿的蜘蛛🕷️。 我指的是搜索引擎优化爬虫。他们是实现SEO的机器人。每个主要的搜索引擎都使用爬虫来…

【学习】JMeter和Postman两种测试工具的主要区别有哪些

Postman和JMeter都是常用的API测试工具,但它们之间存在一些不同之处。以下是Postman和JMeter的主要区别: 语言支持 Postman是一个基于Chrome的应用程序,因此它使用JavaScript作为编程语言。这意味着你可以使用JavaScript来编写测试脚本和断…

Vue中使用Vuex(超详细)基本使用方法

在vue中使用vuex,不同的vue版本要对应使用不同的vuex,在这里不做详情介绍,想具体了解的,请自行度娘或者必应一下。 在使用vuex之前,我们创建一个新的项目,这里我们使用的是vue的脚手架创建一个vue项目。 …

小迪学习笔记(内网安全)(常见概念和信息收集)

小迪学习笔记(内网安全)(一) 内网分布图内网基本概念工作组和域环境的优缺点内网常用命令域的分类单域父域和子域域数和域森林 Linux域渗透问题内网安全流程小迪演示环境信息收集mimikatzLazagne(all)凭据信息政集操作演示探针主机…

书生·浦语大模型开源体系(一)论文精读笔记

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

电脑端手机配置信息检测的实用性与局限性分析

摘要 本文介绍了如何使用克魔助手工具在电脑上检测手机的配置信息。通过该工具,用户可以全面了解手机的硬件和操作系统信息,包括电池、CPU、内存、基带信息和销售信息等。 引言 在日常工作中,了解手机的配置信息对于开发和测试人员非常重要…

聚观早报 | 抖音独立商城App上线;阿里云联发科合作

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 3月29日消息 抖音独立商城App上线 阿里云联发科合作 苹果WWDC24官宣 恒大汽车2023年营收财报 亚马逊投资Anthro…

电商平台api接口:采购比价可用的比价电商商品数据采集API接口推荐

主流电商API数据接口接入方案 目前,许多企业在进行内部采购时都有比价的需求。企业利用比价采购这一方式,能通过对比不同平台上、不同供应商的报价,进而选择最符合其需求和预算的产品或服务。 在比价采购的流程中,最重要的步骤就…

学浪视频如何录屏保存?

学浪软件对录屏进行了防范,不管什么录屏软件只要打开学浪就会黑屏,这里就教大家一个方法,可以使用网页版进行录屏 这里是学浪的网页版地址 https://student-api.iyincaishijiao.com/ep/pc/login 但是你们打开这个地址会直接跳转到这个页面…

03-Linear Regression

什么是回归算法 回归算法是一种有监督算法回归算法是一种比较常用的机器学习算法,用来建立“解释”变量(自变量X)和观测值 (因变量Y)之间的关系; 从机器学习的角度来讲,用于构建一个**算法模型(函数)**来做属性 ( X ) (X) (X) 与标签 ( Y ) (Y) (Y) 之…

LLMs之Mistral:Mistral 7B v0.2的简介、安装和使用方法、案例应用之详细攻略

LLMs之Mistral:Mistral 7B v0.2的简介、安装和使用方法、案例应用之详细攻略 导读:Mistral AI首个7B模型发布于2023年9月,在基准测试中超越Llama 2 13B,一下子声名大振。Mistral 7B v0.2对应的指令调优版本Mistral-7B-Instruct-v0…

UVA1388 - Graveyard (数学)

Graveyard 题面翻译 题目描述 在一个周长为 10000 10000 10000的圆上等距分别着 n n n个雕塑。现在又有 m m m个新雕塑加入(位置可以随意),希望所有 n m nm nm个雕塑在圆周上分布均匀。这就需要移动其中一些原有的雕塑。要求 n n n个雕塑移动的总距离尽量小。 输入格式 输…

mongodb sharding分片模式的集群数据库,日志治理缺失导致写入数据库报错MongoWriteConcernException的问题总结(上)

一、背景 常见的mongodb集群模式有以下三种: 主从复制(Master-Slave)模式副本集(Replica Set)模式分片(Sharding)模式 公司测试环境搭建的集群采用分片模式,有同事反馈说&#xf…

【Vue3源码学习】— CH2.5 reactiveEffect.ts:Vue 3响应式系统的核心

reactiveEffect.ts:Vue 3响应式系统的核心 1. 什么是 reactiveEffect?2. 核心机制2.1 依赖收集(Track)2.2 触发更新(Trigger)2.3 效果范围(effectScope) 3. 源码解析 —— track3.1 …

绿联 部署vocechat,搭建私人聊天服务器,用于小型团队和家庭环境

1、镜像 privoce/vocechat-server:latest 2、安装 2.1、基础设置 重启策略:容器退出时总是重启容器。 2.2、网络 桥接即可。 2.3、存储空间 装载路径:/home/vocechat-server/data不可变更,权限读写。 2.4、端口设置 容器端口3000不可变…

备考ICA----Istio实验14---出向流量管控Egress Gateways实验

备考ICA----Istio实验14—出向流量管控Egress Gateways实验 1. 发布测试用 pod kubectl apply -f istio/samples/sleep/sleep.yaml kubectl get pods -l appsleep2. ServiceEntry 创建一个ServiceEntry允许流量访问edition.cnn.com egressgw/edition-ServiceEntry.yaml api…