Springboot 注解 @Primary

作用

在注入依赖的过程中,当有多个候选者的时候,可以指定哪个候选者为主要的候选者。可以用在类上或者方法上面。通常定义bean常见的有2种方式:1、在类上标注@Component注解,此时可以配合@Primary,标注这个bean为主要候选者。2、在配置文件中使用@Bean注解标注方法,来注册bean,可以在@Bean标注的方法上加上@Primary,标注这个bean为主要候选bean。
使用范围:类、方法
参数:value

定义

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

使用

1、用于类上

public interface IService { }
@Component 
public class Service1 implements IService{ }
@Component 
@Primary //此处使用了@Primary,表示这是个主要候选者
public class Service2 implements IService { }
@Component 
public class InjectService { 

	@Autowired 
	private IService service1; //@1
}

@1: 容器中IService类型的bean有2个,但是service2为主要候选者,所以此处会注入service2

2、用于方法上

public interface IService { }
//注意,这个类没有标注@Component 注解的,表明这个类并非是自动依赖注入
public class Service1 implements IService { } 
//注意,这个类没有标注@Component 注解的,表明这个类并非是自动依赖注入
public class Service2 implements IService { } 
//该类为一个配置类,主要是通过定义Bean注解来实现相关类的依赖注入
@Configuration 
public class ServiceConfig{ 

	@Bean 
	public IService service1() { 
		return new Service1(); 
	}
	
	@Bean 
	@Primary //这个bean被标注为主要的候选者
	public IService service2() { 
		return new Service2(); 
	} 
}
public class InjectService { 
  
	@Autowired 
	private IService service;//@1
	
}

@1:IService为两个实现类,同进在ServiceConfig中,两个实现类Service1、Service2都实现在依赖注入,而此时由于Service2的bean使用了@Primary注解,因此在查找到多个Bean时,会优化选择有@Primary标注的bean进行注入,所以在这里service注入的值是Service2

原创文章,作者:jiafegn,如若转载,请注明出处:https://www.techlearn.cn/archives/271

Previous 2022年9月14日
Next 2022年11月8日

相关推荐

  • springboot 注解 @ComponentScan

    作用 @ComponentScan用于批量注册bean,这个注解会让spring去扫描某些包及其子包中所有的类,然后将满足一定条件的类作为bean 注册到spring容器中。主要使…

    springboot 2022年11月8日
    219
  • SpringBoot 整合Druid数据源

    简介 Druid是阿里巴巴开源的数据库连接池,号称是Java语言中最好的数据库连接池,能够提供强大的监控和扩展功能。 优点 引入依赖 这里使用的是SpringBoot整合版的Dru…

    2023年3月26日
    169
  • Springboot 注解 @DependsOn

    作用 @DependsOn用来指定当前bean依赖的bean,spring在创建bean的时候,如果bean之间没有依赖关系,那么spring容器很难保证bean实例创建的顺 序,…

    springboot 2022年9月1日
    368
  • SpringBoot CRUD基础开发 入门

    需求简介 环境准备 1、新建项目 新建一个crud的项目,如下: 2、新建数据库脚本 新建curd数据库 初始化数据库 引入依赖 1、引入web依赖 2、引入Lombok依赖 3、…

    2023年3月26日
    178
  • Springboot 注解大全-@Import

    作用 @Import可以用来批量导入需要注册的各种类,如普通的类、配置类,完成普通类和配置类中所有bean注册到spring容器中。作用范围:作用于类、注解 定义 参数 value…

    springboot 2022年8月15日
    184
  • Springboot注解-@Component

    作用 作用:@Component的作用是把普通的类实例化到Spring容器中。基于@Component注解有三个扩展,分别是:@Repository、@Service、@Contr…

    springboot 2022年8月3日
    184
  • SpringBoot 整合Redis

    添加依赖 在pom.xml文件添加redis的依赖,如下: 配置 在application.yml文件中添加Redis相关的配置项,如下所示: 案例 1、字符串元素 2、List元…

    springboot 2023年3月26日
    121
  • SpringBoot 整合Mybatis-Plus

    简介 MyBatis-Plus是一个MyBatis的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发,提高效率而生。 添加依赖 注意:添加Mybatis-Plus即可…

    springboot 2023年3月26日
    131
  • SpringBoot 整合 Lombok

    简介 Lombok其实和Spring Boot关系不太大,只是这个工具太好用了,这里也整理记录一下。 Lombok是一个Java库可以与Java IDE(ItelliJ IDEA、…

    2024年8月28日
    261
  • SpringBoot 定时器

    spring提供了@Scheduled和@EnableScheduling两个注解用来快速开发定时器,使用很简单 用法: 1、Springboot的启动类中加上@EnableSch…

    springboot 2023年4月23日
    136