@Primary
注解
在Spring中常用的@Autowired
默认是根据类型Type来自动注入,例如有如下代码:
1 | //api |
有两个以下的实现类1
2
3
4@Component
public class ClassA implements MyInterface{
}
1 | @Component |
当有Bean注入 MyInterface的时候1
2
3
4
5
6@Component
public class Demo(){
@Autowired
private MyInterface myInf;
}
这时候Spring IOC启动的时候就会报错,因为发现有两个Bean实现MyInterface接口,当用@Autowired
注解的时候,容器不知道你用哪个。当然我们也可以用@Resource
和@Qualifier
来区分获取哪个bean,但是如果是IOC容器内所使用的bean,又或者其他已经封装好的jar包,例如springboot里面的DataSource
,只能有一个的时候,这时候这个方法就不能用了。
为了解决这个问题,@Primary
的作用就来了,@Primary
可以标记哪个bean是默认使用的,也就是说是@Autowired
自动导入的bean,以上的两个bean修改如下:
1 | @Component |
1 | @Primary |
当有Bean注入 MyInterface的时候就会默认获取ClassB的类型的Bean了`
@Component
public class Demo(){
@Autowired
private MyInterface myInf;
}