32、Autowired多个实现类怎么注入?
时间: 2024-01-14 21:01:59 浏览: 125
如果一个接口或者抽象类有多个实现类,那么在使用@Autowired注入的时候,Spring会抛出NoUniqueBeanDefinitionException异常,因为无法确定要注入哪个实现类。
解决方法有以下几种:
1. 使用@Qualifier注解指定要注入的实现类的名称。
2. 使用@Primary注解指定一个默认的实现类,当有多个实现类时,优先使用@Primary注解的实现类。
3. 使用@Autowired注解的required属性为false,表示如果找不到要注入的实现类,就不注入。
4. 使用@Resource注解进行注入,它默认按照名称进行注入,如果有多个实现类,可以指定@Resource(name="xxx")注入指定名称的实现类。
相关问题
@Autowired 有多个实现类 注入的是哪个
如果一个接口有多个实现类,使用@Autowired注入时会出现冲突,Spring无法确定要注入哪个实现类。此时可以采用以下两种方式解决:
1. 使用@Qualifier注解指定要注入的实现类的bean名称,例如:
```
@Autowired
@Qualifier("beanName")
private InterfaceName interface;
```
2. 在实现类上使用@Primary注解,表示这个实现类是首选的,例如:
```
@Component
@Primary
public class ImplementClassA implements InterfaceName {}
```
当有多个实现类时,Spring会优先选择使用@Primary注解的实现类进行注入。
Autowired 指定接口实现类 可配置
是的,可以通过在 @Autowired 注解中指定接口实现类的方式来配置。具体方法如下:
1. 在接口实现类上使用 @Component 注解,将其标记为组件。
2. 在需要进行依赖注入的类中,使用 @Autowired 注解,并指定需要注入的接口类型,例如:
```
@Autowired
private InterfaceName interfaceName;
```
3. 如果有多个实现类,可以通过 @Qualifier 注解来指定需要注入的实现类,例如:
```
@Autowired
@Qualifier("implementationName")
private InterfaceName interfaceName;
```
其中,"implementationName" 是需要注入的实现类的名称。注意,@Qualifier 注解需要和 @Autowired 注解一起使用才能生效。
阅读全文