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注解的作用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot中获取配置文件的注解详解

    SpringBoot中获取配置文件的注解详解

    这篇文章主要介绍了SpringBoot中获取配置文件的注解详解, 一般情况下:如果我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value,如果我们使用JavaBean来与配置文件进行映射,我们直接使用@ConfigurationProperties,需要的朋友可以参考下
    2023-10-10
  • Java源码解析阻塞队列ArrayBlockingQueue功能简介

    Java源码解析阻塞队列ArrayBlockingQueue功能简介

    今天小编就为大家分享一篇关于Java源码解析阻塞队列ArrayBlockingQueue功能简介,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • java使用compareTo实现一个类的对象之间比较大小操作

    java使用compareTo实现一个类的对象之间比较大小操作

    这篇文章主要介绍了java使用compareTo实现一个类的对象之间比较大小操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java静态代码块作用及执行顺序解析

    Java静态代码块作用及执行顺序解析

    这篇文章主要介绍了Java静态代码块作用及执行顺序解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • springboot实现登录功能的完整步骤

    springboot实现登录功能的完整步骤

    这篇文章主要给大家介绍了关于springboot实现登录功能的完整步骤,在web应用程序中,用户登录权限验证是非常重要的一个步骤,文中通过代码以及图文介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • Spring Boot MyBatis 连接数据库配置示例

    Spring Boot MyBatis 连接数据库配置示例

    本篇文章主要介绍了Spring Boot MyBatis 连接数据库示例的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-02-02
  • myeclipse10配置tomcat教程详解

    myeclipse10配置tomcat教程详解

    这篇文章主要为大家详细介绍了myeclipse10配置tomcat的教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • SpringBoot使用JSch操作Linux的方法

    SpringBoot使用JSch操作Linux的方法

    JSch是一个Java库,它提供了SSH(Secure Shell)的Java实现,允许Java程序通过SSH协议连接到远程系统(如Linux),这篇文章主要介绍了SpringBoot使用JSch操作Linux,需要的朋友可以参考下
    2023-11-11
  • Java源码解析之详解ReentrantLock

    Java源码解析之详解ReentrantLock

    今天给大家带来的是关于Java并发的相关知识,文章围绕着ReentrantLock源码展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Spring Cloud + Nacos + Seata整合过程(分布式事务解决方案)

    Spring Cloud + Nacos + Seata整合过程(分布式事务解决方案)

    Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务,这篇文章主要介绍了Spring Cloud + Nacos + Seata整合过程(分布式事务解决方案),需要的朋友可以参考下
    2022-03-03

最新评论