Spring中@Primary注解的作用详解

 更新时间:2023年10月11日 11:42:32   作者:五更琉璃V  
这篇文章主要介绍了Spring中@Primary注解的作用详解,@Primary 注解是Spring框架中的一个注解,用于标识一个Bean作为默认的实现类,当存在多个实现类时,通过使用@Primary注解,可以指定其中一个作为默认的实现类,以便在注入时自动选择该实现类,需要的朋友可以参考下

@Primary注解作用详解

此注解时为了标识哪个Bean是默认的Bean

  @Bean
	  public AMapper aMapper1(AConfig aConfig) {
	    return new AMapperImpl1(aConfig);
	  }
	  @Bean
	  @Primary
	  public AMapper aMapper2(AConfig aConfig) {
	    return new AMapperImpl2(aConfig);
	  }

上述代码,当存在多个相同类型的Bean注入时,加上@Primary注解,来确定默认的实现标识。

案例

public interface Worker {
	    public String work();
	}
	@Component
	public class Singer implements Worker {
	    @Override
	    public String work() {
	        return "歌手的工作是唱歌";
	    }
	}
	@Component
	public class Doctor implements Worker {
	    @Override
	    public String work() {
	        return "医生工作是治病";
	    }
	}
	// 启动,调用接口
	@SpringBootApplication
	@RestController
	public class SimpleWebTestApplication {
	    @Autowired
	    private Worker worker;
	    @RequestMapping("/info")
	    public String getInfo(){
	        return worker.work();
	    }
	    public static void main(String[] args) {
	        SpringApplication.run(SimpleWebTestApplication.class, args);
	    }
	}

上述情况下,一个接口多个实现,并且通过@Autowired注入 Worker, 由于@Autowired是通过ByType的形式,来给指定的字段和方法来注入所需的外部资源, 但由于此类有多个实现,Spring不知道注入哪个实现,所以在启动的时候会抛出异常。

Consider marking one of the beans as @Primary,
updating the consumer to accept multiple beans,
or using @Qualifier to identify the bean that should be consumed。

当给指定的组件添加@primary后,默认会注入@Primary的配置组件。

@Component
@Primary
public class Doctor implements Worker {
    @Override
    public String work() {
        return "医生工作是治病";
    }
}

给Doctor 加上@Primary,则默认注入的就是 Doctor 的实现。 浏览器访问:localhost:8080/info

在这里插入图片描述

到此这篇关于Spring中@Primary注解的作用详解的文章就介绍到这了,更多相关@Primary注解的作用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java  HashMap扩容详解及实例代码

    java HashMap扩容详解及实例代码

    这篇文章主要介绍了java HashMap扩容详解及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • Java异常处理try catch的基本使用

    Java异常处理try catch的基本使用

    大家好,本篇文章主要讲的是Java异常处理try catch的基本使用,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • idea 离线安装lombok插件的方法步骤(图文)

    idea 离线安装lombok插件的方法步骤(图文)

    这篇文章主要介绍了idea 离线安装lombok插件的方法步骤(图文),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Java并发系列之ReentrantLock源码分析

    Java并发系列之ReentrantLock源码分析

    这篇文章主要为大家详细介绍了Java并发系列之ReentrantLock源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Java实现反转义的示例代码

    Java实现反转义的示例代码

    本文主要介绍了Java实现反转义的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • Maven介绍与配置+IDEA集成Maven+使用Maven命令小结

    Maven介绍与配置+IDEA集成Maven+使用Maven命令小结

    Maven是Apache软件基金会的一个开源项目,是一个优秀的项目构建管理工具,它用来帮助开发者管理项目中的 jar,以及 jar 之间的依赖关系、完成项目的编译、测试、打包和发布等工作,本文给大家介绍Maven介绍与配置+IDEA集成Maven+使用Maven命令,感兴趣的朋友一起看看吧
    2024-01-01
  • Java如何利用Socket传输信息或文件

    Java如何利用Socket传输信息或文件

    这篇文章主要介绍了Java如何利用Socket传输信息或文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • SpringCloud Zuul网关功能实现解析

    SpringCloud Zuul网关功能实现解析

    这篇文章主要介绍了SpringCloud Zuul网关功能实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 一文带你搞懂Java中线程的创建方式

    一文带你搞懂Java中线程的创建方式

    这篇文章主要为大家详细介绍了Java中线程的创建方式的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
    2023-03-03
  • mybatisPlus如何进行连接问题

    mybatisPlus如何进行连接问题

    MyBatisPlus提供了leftJoin方法支持左连接查询,通过QueryWrapper构建查询条件,指定连接的表名和连接条件,通过select方法指定要查询的字段
    2025-03-03

最新评论