@Autowired 和 @Resource注解, 一个接口有多个实现类的时候Spring注入遇到的问题
先说下我遇到的问题,有一个接口 CompensationService, 有两个实现类 MusicCompensationStrategyImpl 和 TakeDeliveryCompensationStrategyImpl
在另一个类中需要用到其中的两个实现类,我直接CompensationService com = new MusicCompensationStrategyImpl () , 然后调用此实现类实现的方法,但是这个实现类注入了一个接口(此接口是一个@FeginClients接口,调用另一个服务),所以就出现了空指针异常,此接口注入不进来。
问题的原因是,我new个对象只是在JVM堆中产生了个对象,而Fegin是交给了Spring容器来管理,虽然此spring容器也是在JVM中,但是毕竟是两个不同的容器,如同两堵墙不能想通,果断弃之。
如下图 和 代码:

@Slf4j
@Service(value = "takeDeliveryCompensationStrategyImpl")
public class TakeDeliveryCompensationStrategyImpl implements CompensationService { @Autowired
private TakeDeliveryServiceOrderService takeDeliveryServiceOrderService; @Override
public Result<String> compensationMethod(OrderForm orderForm, Long accountId) {
Result<String> takeDeliveryServiceOrder = takeDeliveryServiceOrderService.createTakeDeliveryServiceOrder(orderForm);
return takeDeliveryServiceOrder;
}
}
如下:
@Slf4j
@Service("musicCompensationStrategyImpl")
@AllArgsConstructor
public class MusicCompensationStrategyImpl implements CompensationService { CompensationOrderService compensationOrderService;
AccountRemoteService accountRemoteService; @Override
public Result<String> compensationMethod(OrderForm orderForm, Long accountId) {
又用@Autowired注解,启动报错,信息显示无法不知该注入那个实现类,因为这个注解是按照类型来的,出现了两个实现类,也不知道按照那个, 果断弃之。
最后用@Resource注解,这个是按照name来的,在每个实现类上加上,如 @Service("musicCompensationStrategyImpl"),类名全程(首字母小写, 看我上面的代码),然后在要调用的类注入 @Resource(name = "musicCompensationStrategyImpl")
@Resource(name = "musicCompensationStrategyImpl")
private CompensationService compensationServiceMusic;
@Resource(name = "takeDeliveryCompensationStrategyImpl")
private CompensationService compensationServiceTake;
@Autowired 和 @Resource注解, 一个接口有多个实现类的时候Spring注入遇到的问题的更多相关文章
- @Autowired和@Resource注解的一个意外重要区别
今天上午,因为公司要跟客户展示最近开发的项目,然后安排了我重新构建一个template项目,用来向客户展示参考.基于已开发好的代码,我在进行一些简化抽取的时候出现了一个有趣的问题 因为我们有一个spr ...
- 解决非controller使用,@Autowired或者@Resource注解注入Mapper接口为null的问题
知识点:在service层中注入其它的service接口或者mapper接口都是可以的 但是在封装的Utils工具类中或者非controller普通类中使用@Autowired@Resource注解注 ...
- Spring下的@Inject、@Autowired、@Resource注解区别(转)
1.@Inject javax.inject JSR330 (Dependency Injection for Java) 这是JSR330中的规范,通过AutowiredAnnotationBean ...
- Java框架spring 学习笔记(九):Spring的bean管理(@Required、@Component、@Autowired、@Resource注解)
注解:代码里面特殊的标记,使用注解可以完成相关功能 注解写法:@注解名称(属性名.属性值) @Required 用在set方法上,一旦用了这个注解,那么容器在初始化bean的时候必须要进行set,也就 ...
- @Autowired和@Resource注解的区别
@Autowired注解是按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false.如果我们想使用按名称装配,可以结合@Qualifier注 ...
- 关于@Autowired和@Resource注解区别
区分一下@Autowired和@Resource两个注解的区别: 1.@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配 2.@A ...
- spring容器注入一个接口的两个实现类
spring容器中能拥有两个同种类型的bean吗?我有两个dao类同时实现一个接口,这两个接口注入时报了异常如下. org.springframework.beans.factory.NoSuchBe ...
- spring下应用@Resource, @Autowired 和 @Inject注解进行依赖注入的差异
为了探寻 '@Resource', '@Autowired', 和'@Inject'如何解决依赖注入中的问题,我创建了一个"Party"接口,和它的两个实现类"Perso ...
- (转)用@Resource注解完成属性装配
http://blog.csdn.net/yerenyuan_pku/article/details/52858878 前面我们讲过spring的依赖注入有两种方式: 使用构造器注入. 使用属性set ...
随机推荐
- 80: bzoj3705 线段树合并
$des$ 现在有一棵二叉树,所有非叶子节点都有两个孩子.在每个叶子节点上有一个权值(有n个叶子节点,满足这些权值为1..n的一个排列).可以任意交换每个非叶子节点的左右孩子.要求进行一系列交换,使得 ...
- CF1237C2 【Balanced Removals (Harder)】
这么妙的题怎么没人发题解啊 首先这是三维的,我们可以对其进行降维打击 先考虑一维怎么做? 我们可以对其该维坐标进行排序,按照顺序输出,可能会多余一个 那拓展到二维呢? 我们可以把它转化成一维,分成很多 ...
- 【loj2567】【APIO2016】划艇
题目 \(N\)个位置,每个位置要么不选,要么选\([ a_i, b_i ]\)中的一个数: 问最后的单调上升序列(mod 1e9+7)有多少种: \(1 \le N \le 500\) 题解 orz ...
- mysql ltrim() 函数
mysql> select " dedede"; +----------+ | dedede | +----------+ | dedede | +----------+ r ...
- 20189220 余超《Linux内核原理与分析》第一周作业
实验一 Linux系统简介 通过实验一主要是学习到了Linux 的历史简介,linux与windows之间的区别,主要是免费和收费,软件和支持,安全性,使用习惯,可制定性,应用范畴等.linux具有稳 ...
- 论文解读:3D Hand Shape and Pose Estimation from a Singl RGB Image
本文链接:https://blog.csdn.net/williamyi96/article/details/89207640由于最近做到了一些 3D Hand Pose Estimation 相关的 ...
- 接口测试中模拟post四种请求数据
https://www.jianshu.com/p/3b6d7aa2043a 一.背景介绍 在日常的接口测试工作中,模拟接口请求通常有两种方法,fiddler模拟和HttpClient模拟. Fidd ...
- 堆排序Heapsort的Java和C代码
Heapsort排序思路 将整个数组看作一个二叉树heap, 下标0为堆顶层, 下标1, 2为次顶层, 然后每层就是"3,4,5,6", "7, 8, 9, 10, 11 ...
- 视频色彩空间RGB、YUV、YCbCr
RGB.YUV和YCbCr都是人为规定的彩色模型或颜色空间(有时也叫彩色系统或彩色空间).它的用途是在某些标准下用通常可接受的方式对彩色加以描述.本质上,彩色模型是坐标系统和子空间的阐述. RGB R ...
- 001 okhttp3的POST使用
继续使用上面的项目 1.被调用的项目 package com.jun.web2forokhttp.okhttp; import com.jun.web2forokhttp.bean.HttpDomai ...