首页 > 作文

springboot接口多实现类选择性注入解决方案

更新时间:2023-04-06 02:13:18 阅读: 评论:0

一、问题的描述

在实际的系统应用开发中我经常会遇到这样的一类需求,相信大家在工作中也会经常遇到:

同一个系统在多个省份部署。

一个业务在北京是一种实现方式,是基于北京用户的需求。

同样的业务在上海是另外一种实现方式,计算机科学与技术专业大学排名与北京的实现方式大同小异

遇到这样的需求,我们通常会定义一个业务实现的接口,比如:

在北京环境下这样实现,比如:

在上海环境下这样实现,比如:

然后我们写一个模拟业务测试用例

当我们执行这个测试用例的时候一定会报错,因为spring发现了两个idemorvice的实现类。它不知道去实例化哪一个实现类,来作为idemorvice的实际业务处理bean。当然我们期望的状态是:

在北京部署系统的时候,使吉他入门指法用demorvicebeijing作为idemorvice的实现类完成依赖注入

在上海部署系统的时候,使用demorviceshanghai作为idemorvice的实现类完成依赖注入

二、相对低级解决方案

面对上面的需求,先说几个相对低级的解决方案,这几个方案虽然可以实现我们期望的状态,但是对运维不够友好。

2.1. 方案一:使用@primary注解

假如在北京部署系统的时候,在demorvicebeijing的类上面加上@primary,该注解的作用就是强迫从多个实现类里面选一个实现类,如果spring不知道选哪一个,我们告诉它一个默认的。

2.2. 方案二:使用@resource注解

因为@resource注解默认使用名称进行依赖注入,所以变量名明确叫做demorvicebeijing(首字母小写),使用的就是demorvicebeijing实现类。

或者

2.3.方案三:使用@qualifier注解

与上文同样的道理,使用@qualifier注解,指定bean的名称进行依赖注入

上面所提到的三个方案虽然都可以解决:在不同的部署环境下使用不同的接口实现类完成依赖注入的问题。但是这样不好,因为一旦我们要把部署环境从beijing(北京)换成shang中英词典hai(上海),就需要把上面的注解的位置或者内容全都修改一遍(所有的实现类代码都要修改)。

三、相对高级的解决方案

我们提出进一步的期望:就是只修改一个配置就能完成部署环境切换的操作。比如:

当我们期望把部署环境从北京切换到上海的时候,只需要将上文配置中的beijing 改成 shanghai ,这该怎么实现呢?

在北京的实现类上面加上conditionalonproperty注解,havingvalue的值为beijing

在上海的实现类上面加上conditionalonproperty注解,hav笨狼旅行记ingvalue的值为shanghai

conditionalonproperty不定代词注解在这里的作用就是:读取配置文件发现deploy.province,并将该配置的值与havingvalue匹配,匹配上哪一个就实例化哪一个类作为该接口的实现类bean注入到spring容器中(当然注入过程需要配合@component注解实现)

以上就是springboot接口多实现类选择性注入解决方案的详细内容,更多关于springboot接口多实现类选择性注入的资料请关注www.887551.com其它相关文章!

本文发布于:2023-04-06 02:13:16,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/b2307e53c7f4dc7f4d0d9f4665a326f0.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:springboot接口多实现类选择性注入解决方案.doc

本文 PDF 下载地址:springboot接口多实现类选择性注入解决方案.pdf

标签:注解   北京   环境   接口
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图