@Autowired注解与@Qualifier注解搭配使用----解决多实现选择注入问题

问题:当一个接口实现由两个实现类时,只使用@Autowired注解,会报错,如下图所示

实现类1

实现类2

controller中注入

然后启动服务报错,如下所示:

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘orderController‘: Unsatisfied dependency expressed through field ‘productOrderService‘; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type ‘net.xdclass.order_service.service.ProductOrderService‘ available: expected single matching bean but found 2: service1,service2

原因是存在两个实例service1,service2,系统不知道注入哪个一个实例,其实idea工具已经飘红提示了存在两个实例,所以这里我们就需要用到@Qualifier注解来指明注入的实例,如下图所示

这样就ok了,idea飘红提示也没有了,启动也正常

补充:我们也可以用@Resource(name="service1")如图所示

原文地址:https://www.cnblogs.com/matd/p/11128084.html

时间: 2024-10-29 04:56:16

@Autowired注解与@Qualifier注解搭配使用----解决多实现选择注入问题的相关文章

@Autowired注解与@Qualifier注解搭配使用

问题:当一个接口实现由两个实现类时,只使用@Autowired注解,会报错,如下图所示 实现类1 实现类2 controller中注入 然后启动服务报错,如下所示: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean

阶段3 2.Spring_06.Spring的新注解_6 Qualifier注解的另一种用法

复制上面的数据源到下面改改名字 现在就是有两个数据源 创建一个eesy02的数据库 找到sql语句再创建Account表 现在就相当于有连个库一个eesy一个是eesy02这连个库. account里面有三条记录 eesy的库内有5条数据 把数据源2的数据库地址改成eesy02这个库 执行测试类.查询出来5条记录 如果这里的id改成ds2 再次运行测试方法就会报错 需要一个对应的bean,.但是找到了两个bean 这里改成ds1 这就证明连的是eesy02这个库 这里其实隐藏了一个Autowir

spring的@primary和@qualifier注解解决一个接口多个实现的注入问题

@Primary注解 Spring中有提供一个@Primary注解,具体的作用是在一个接口有多个实现类的情况下,会默认选择其中一种实现,帮助Spring对象的正常注入. 比如说现在有一个接口UserService,它有两个实现类UserServiceImpl1和UserServiceImpl2,根据依赖倒置的原则,在Spring中注入的对象应该是接口,由接口去调用具体的实现. // 接口 public interface UserService { String getUserName(); }

Spring5:@Autowired注解、@Resource注解和@Service注解

什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: 1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文件,那么.xml文件又会非常多.总之这将导致配置文件的可读性与可维护性变得很低 2.在开发中在.java文件和.xml文件之间不断切换,是一件麻烦的事,同时这种思维上的不连贯也会降低开发的效率 为了解决这两个问题,Spring引入了注解,通过"@XXX"的方式,让注解与Java

Spring中@Autowired注解、@Resource注解的区别(转)

标签: Autowired Resource Spring(3)  Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了.@Resource有两个属性是比较重要的,分是name和type,Spring将@Reso

【spring cloud】spring boot2.x下 使用feign,注解@EnableFeignClients 找不到的解决方法

spring boot2.x下 使用feign,注解@EnableFeignClients 找不到的解决方法 在spring boot1.x下,使用注解@EnableFeignClients,jar包依赖是: <!-- feign远程调用 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</

spring事务(4)-----复习[email&#160;protected]注解、@Resource注解和@Service注解(为手写做准备)

什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: 1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文件,那么.xml文件又会非常多.总之这将导致配置文件的可读性与可维护性变得很低 2.在开发中在.java文件和.xml文件之间不断切换,是一件麻烦的事,同时这种思维上的不连贯也会降低开发的效率 为了解决这两个问题,Spring引入了注解,通过"@XXX"的方式,让注解与Java

@Autowired 注释与@Qualifier 注释

@Service("OrganDaoIbatis") public class OrganDaoIbatis extends BaseDao implements IOrganDao { @Autowired(required=false) @Qualifier("sqlMapClient") private SqlMapClient sqlClient = null; 使用 @Autowired(required = false)作用: 当候选 Bean 数目不为

Java 注解入门实例 &amp;&amp; 注解传参

参考 概念:java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法 JDK内置系统注解: @Override 用于修饰此方法覆盖了父类的方法; @Deprecated 用于修饰已经过时的方法; @Suppvisewarnings 用于通知java编译器禁止特定的编译警告. 注解按照运行机制划分 源码注解:注解只在源码中存在,编译成.class文件就不存在了: 编译时注解:注解在源码和.class文件中都存在(例:JDK自带注解): 运行时注解:在运行阶段还起作用,甚至会影响运行逻辑