加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Spring Boot中如何干掉过多的if else!

发布时间:2019-04-27 05:34:36 所属栏目:建站 来源:Java高级架构狮
导读:需求 这里假造一个营业需求,让各人轻易领略。假设有一个订单体系,内里的一个成果是按照订单的差异范例作出差异的处理赏罚。 订单实体: service接口: 传统实现 按照订单范例写一堆的if else: 计策模式实现 操作计策模式,只必要两行即可实现营业逻辑: 可

Spring Boot中怎样关掉过多的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:

ClassScaner:

ClassScaner:扫描器材类源码

HandlerProcessor必要实现BeanFactoryPostProcessor,在spring处理赏罚bean前,将自界说的bean注册到容器中。

焦点事变已经完成,此刻看看HandlerContext怎样获取对应的处理赏罚器:

HandlerContext:

BeanTool:获取bean器材类

#getInstance要领按照范例获取对应的class,然后按照class范例获取注册到spring中的bean。

最后请留意一点,HandlerProcessor和BeanTool必需能被扫描到,可能通过@Bean的方法显式的注册,才气在项目启动时施展浸染。

总结

操作计策模式可以简化繁杂的if else代码,利便维护,而操作自界说注解和自注册的方法,可以利便应对需求的改观。本文只是提供一个大抵的思绪,尚有许多细节可以机动变革,譬喻行使列举范例、可能静态常量,作为订单的范例,信托你能想到更多更好的要领。

【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读