作用
在注入依赖的过程中,当有多个候选者的时候,可以指定哪个候选者为主要的候选者。可以用在类上或者方法上面。通常定义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