• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于springboot:在-Spring-Boot-中如何干掉-if-else

java 搞代码 3年前 (2022-02-19) 25次浏览 已收录 0个评论

我的公众号:MarkerHub,Java网站:https://markerhub.com

更多精选文章请点击:Java笔记大全.md

小Hub领读

干掉if else罕用策略模式,记得了哈!其实就是抽取一个抽象类,而后依据类型指定不同的实现类执行办法。你学废了吗?

需要

这里虚构一个业务需要,让大家容易了解。假如有一个订单零碎,外面的一个性能是依据订单的不同类型作出不同的解决。

订单实体:

service接口:

传统实现

依据订单类型写一堆的if else:

策略模式实现

利用策略模式,只须要两行即可实现业务逻辑:

能够看到下面的办法中注入了HandlerContext,这是一个处理器上下文,用来保留不同的业务处理器,具体在下文会解说。咱们从中获取一个形象的处理器AbstractHandler,调用其办法实现业务逻辑。

当初能够理解到,咱们次要的业务逻辑是在处理器中实现的,因而有多少个订单类型,就对应有多少个处理器。当前需要变动,减少了订单类型,只须要增加相应的处理器就能够,上述OrderServiceV2Impl齐全不需改变。

咱们先看看业务处理器的写法:

首先每个处理器都必须增加到spring容器中,因而须要加上@Component注解,其次须要加上一个自定义注解@HandlerType,用于标识该处理器对应哪个订单类型,最初就是继承AbstractHandler,实现本人的业务逻辑。

自定义注解 @HandlerType:

形象处理器 AbstractHandler:

自定义注解和形象处理器都很简略,那么如何将处理器注册到spring容器中呢?

具体思路是:

1、扫描指定包中标有@HandlerType的类;

2、将注解中的类型值作为key,对应的类作为value,保留在Map中;

3、以下面的map作为结构函数参数,初始化HandlerContext,将其注册到spring容器中;

咱们将外围的性能封装在HandlerProcessor类中,实现下面的性能。

HandlerProcessor:

ClassScanner:扫描工具类源码

HandlerProcessor须要实现BeanFactoryPostProcessor,在spring解决bean前,将自定义的bean注册到容器中。

外围工作曾经实现,当初看看HandlerContext如何获取对应的处理器:

HandlerContext:

BeanTool:获取bean工具类

#getInstance 办法依据类型获取对应的class,而后依据class类型获取注册到spring中的bean。

最初请留神一点,HandlerProcessor和BeanTool必须能被扫描到,或者通过@Bean的形式显式的注册,能力在我的项目启动时发挥作用。

总结

利用策略模式能够简化繁冗的if else代码,不便保护,而利用自定义注解和自注册的形式,能来源gaodaimacom搞#代%码网够不便应答需要的变更。本文只是提供一个大抵的思路,还有很多细节能够灵便变动,例如应用枚举类型、或者动态常量,作为订单的类型,置信你能想到更多更好的办法。

示例代码:https://github.com/ciphermagi…

举荐浏览

Java笔记大全.md

太赞了,这个Java网站,什么我的项目都有!https://markerhub.com

这个B站的UP主,讲的java真不错!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于springboot:在-Spring-Boot-中如何干掉-if-else

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址