自动装配[@Autowired]的歧义性

Posted 胖头猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动装配[@Autowired]的歧义性相关的知识,希望对你有一定的参考价值。

在使用@Autowired自动装配时,如果一个接口有多个实现类,那么自动装配就会出现错误,因为Spring无法判断到底要装配哪个实现类实例(bean)。

1.可以使用@Qualifier("beanName")明确指定要注入的是哪个bean

@Autowired
@Qualifier("beanName")
private MyBean myBean;
---------------------------------
@Autowired
@Qualifier("beanName")
public void setBean(MyBean bean){

    this.myBean = bean;    
}

2.标识首选的bean,某个接口有多个实现类,可以在某个实现类上标注@Primary,当出现歧义时,Spring会使用首选的bean,其他的会忽略,但是如果这个接口有两个实现类都标注了@Primary的话,那么又出现歧义了,所以@Primary只能标注在一个接口的一个实现类上

@Component
@Primary
public class MyBeanImpl implements MyBean{

}

--------------------------------------------------------
<bean id="myBean" class="com.wzy.MyBeanImpl" primary="true" />

--------------------------------------------------------
@Bean
@Primary
public MyBean getMyBean(){

    return new MyBeanImpl();
}

 

以上是关于自动装配[@Autowired]的歧义性的主要内容,如果未能解决你的问题,请参考以下文章

Spring5 解决Bean在自动装配时的歧义性

Spring实战自动装配的歧义性

Spring-处理自动装配的歧义性

spring装配---处理自动装配的歧义性

spring框架

spring 装配核心笔记