同一接口有多个实现类,怎么来注入一个指定的实现?@Resource、@Autowired、@Qualifier

简介: 同一接口有多个实现类,怎么来注入一个指定的实现?@Resource、@Autowired、@Qualifier

如果一个接口有2个以上不同的实现类, 那么如何Autowire一个指定的实现

1:首先,UserService接口有两个实现类 UserService1UserService2

UserService接口


2:以下是UserService接口的两个实现类UserService1和UserService2,请注意@service注解的使用方式,这里给每个实现类标注了不同的名称,方便在@Resource注入时区别注入

UserService接口实现类UserService1


UserService接口实现类UserService2


比如一个接口有两个实现类,这时候再按@Autowired的方式去引用, 在同时存在两个实现类的情况下会报错, 这是由于 @Autowired 的特性决定的: @Autowired 的注入方式是 byType 注入, 当要注入的类型在容器中存在多个时,Spring是不知道要引入哪个实现类的,所以会报错。


那么在同一类型拥有多个实现类的时候,如何注入呢?这种场景下,只能通过 byName 注入的方式。可以使用 @Resource 或 @Qualifier 注解。


@Resource 默认是按照 byName 的方式注入的, 如果通过 byName 的方式匹配不到,再按 byType 的方式去匹配。



下面是几种注入方式


1. 通过 @Autowired 和 @Qualifier 配合注入


2:使用@Resource注入,根据@Service指定的名称区分


(flag1是UserService1实现类 @Service("flag1")注解指定的)

3. 使用@Resource注入,根据默认类名区分


userService1是UserService1实现类的类名


总结:

1、@Autowired 是通过 byType 的方式去注入的, 使用该注解,要求接口只能有一个实现类。

2、@Resource 可以通过 byName 和 byType的方式注入, 默认先按 byName的方式进行匹配,如果匹配不到,再按 byType的方式进行匹配。

3、@Qualifier 注解配合@Autowired 一起使用。


4、@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。


相关文章
|
6月前
|
Java Spring 容器
@Resource 和 @Autowired区别是什么?
@Resource 和 @Autowired区别是什么?
|
6月前
|
Java Spring 容器
@Resource注解是什么作用,和@bean区别是什么?
@Resource注解是什么作用,和@bean区别是什么?
163 0
|
6月前
|
Java Spring
spring注解@Autowired、@Resource说明
spring注解@Autowired、@Resource说明
|
Java Spring
【Java注解用法】@Autowired 与@Resource的区别以及@Qualifier的介绍
【Java注解用法】@Autowired 与@Resource的区别以及@Qualifier的介绍
86 0
|
Java 编译器 Spring
Spring框架@Autowired和@Resource到底有什么区别
Spring框架@Autowired和@Resource到底有什么区别
514 0
|
开发框架 SpringCloudAlibaba Java
Spring注解装配:@Autowired和@Resource使用及原理详解
`@Resource`和`@Autowired`都是实现bean的注入,在日常开发中使用非常频繁,但是使用体验不太一样,笔者喜欢用`@Resource`,因为在使用`@Autowired`时IDEA会出现一些警告爆红提示
333 0
Spring注解装配:@Autowired和@Resource使用及原理详解
|
Java Spring
解析Spring注解:@Resource与@Autowired的区别
在Spring框架中,依赖注入是实现松耦合、可维护性高的应用的重要方式之一。`@Resource`和`@Autowired`是两个常用的注解,用于实现依赖注入。然而,它们在用法和特点上有所不同。本文将详细介绍`@Resource`和`@Autowired`之间的区别,以及在Spring应用中的应用场景。
302 0
SpringAOP导致@Autowired依赖注入失败
SpringAOP导致@Autowired依赖注入失败
195 1
|
开发框架 Java Spring
@Autowired与@Resource有何区别?
@Autowired与@Resource有何区别?
93 0
|
开发框架 Java Spring
spring注解:@Autowired 和@Resource
spring注解:@Autowired 和@Resource
306 0