先说下我遇到的问题,有一个接口 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注入遇到的问题的更多相关文章

  1. @Autowired和@Resource注解的一个意外重要区别

    今天上午,因为公司要跟客户展示最近开发的项目,然后安排了我重新构建一个template项目,用来向客户展示参考.基于已开发好的代码,我在进行一些简化抽取的时候出现了一个有趣的问题 因为我们有一个spr ...

  2. 解决非controller使用,@Autowired或者@Resource注解注入Mapper接口为null的问题

    知识点:在service层中注入其它的service接口或者mapper接口都是可以的 但是在封装的Utils工具类中或者非controller普通类中使用@Autowired@Resource注解注 ...

  3. Spring下的@Inject、@Autowired、@Resource注解区别(转)

    1.@Inject javax.inject JSR330 (Dependency Injection for Java) 这是JSR330中的规范,通过AutowiredAnnotationBean ...

  4. Java框架spring 学习笔记(九):Spring的bean管理(@Required、@Component、@Autowired、@Resource注解)

    注解:代码里面特殊的标记,使用注解可以完成相关功能 注解写法:@注解名称(属性名.属性值) @Required 用在set方法上,一旦用了这个注解,那么容器在初始化bean的时候必须要进行set,也就 ...

  5. @Autowired和@Resource注解的区别

    @Autowired注解是按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false.如果我们想使用按名称装配,可以结合@Qualifier注 ...

  6. 关于@Autowired和@Resource注解区别

    区分一下@Autowired和@Resource两个注解的区别: 1.@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配 2.@A ...

  7. spring容器注入一个接口的两个实现类

    spring容器中能拥有两个同种类型的bean吗?我有两个dao类同时实现一个接口,这两个接口注入时报了异常如下. org.springframework.beans.factory.NoSuchBe ...

  8. spring下应用@Resource, @Autowired 和 @Inject注解进行依赖注入的差异

    为了探寻 '@Resource', '@Autowired', 和'@Inject'如何解决依赖注入中的问题,我创建了一个"Party"接口,和它的两个实现类"Perso ...

  9. (转)用@Resource注解完成属性装配

    http://blog.csdn.net/yerenyuan_pku/article/details/52858878 前面我们讲过spring的依赖注入有两种方式: 使用构造器注入. 使用属性set ...

随机推荐

  1. cyyz: Day 6 平衡树整理

    一.平衡树 知识点: ,并且左右两个子树都是一棵平衡二叉树.平衡二叉树的常用实现方法有红黑树.AVL.替罪羊树.Treap.伸展树等. 最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n- ...

  2. 第03组 Alpha冲刺(1/4)

    队名:不等式方程组 组长博客 作业博客 团队项目进度 组员一:张逸杰(组长) 过去两天完成的任务: 文字/口头描述: 制定了初步的项目计划,并开始学习一些推荐.搜索类算法 GitHub签入纪录: 暂无 ...

  3. nodejs之MongoDB安装[windows平台]

    下载MongoDB,本为下载msi文件安装,下载地址     下载完成之后直接双击文件安装,安装时注意安装路径 创建一个空文件夹,用于存放数据库文件 通过控制台进入安装目录下的bin目录,或者在bin ...

  4. 洛谷P4343 [SHOI2015]自动刷题机

    题目 易得该题目中的\(n\)和\(k\)具有单调性,满足二分的性质,因此该题目而已用二分来枚举\(n\),然后对于每个\(n\)模拟出它所对应的\(k\),然后注意注意代码细节,并且当当前\(k\) ...

  5. 安装与配置HSDIS与JITWatch

    本作者的系统: 操作系统版本及位数可通过uname -a命令查看,如下: Linux ubuntu 3.13.0-32-generic #57~precise1-Ubuntu SMP Tue Jul ...

  6. TypeScript之Https通信

    NetWorkRequest.ts(源代码如下) import * as https from "https"; import * as vscode from 'vscode'; ...

  7. 检测是否安装或者开启flash

    function flashChecker() { var hasFlash = 0; //是否安装了flash var flashVersion = 0; //flash版本 if(document ...

  8. Cesium学习笔记-工具篇20-PrimitiveTexture自定义渲染-贴图【转】

    前几篇博客我们了解了自定义点.线.面绘制,这篇我们接着学习cesium自定义纹理贴图.我们完成点线面的绘制,只是绘制出了对象的框架,没有逼真的外观.逼真外观是需要设置材质来实现:Material . ...

  9. Unity3D新手入门初级教程

    根据游戏调查公司 Newzoo 针对全球手机游戏市场所做的调查报告显示,2016年全球游戏市场规模将达到 996 亿美元,其中手机游戏市场将以 21.3% 的增幅获得约 369 亿美元的收入,而中国手 ...

  10. Devops(二):CentOS7(在线)安装Docker

    安装环境:Centos7.5 从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE.1)Docker CE 即社区免费版2)Dock ...