# disroute **Repository Path**: gspandy78/disroute ## Basic Information - **Project Name**: disroute - **Description**: Disroute是一个状态分发处理工具,根据对象里面的某个属性值定义不同的执行方法,完成处理逻辑的解耦,优化大量if-else逻辑 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/huoyo/disroute - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 7 - **Created**: 2022-04-10 - **Last Updated**: 2022-04-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Disroute ## 介绍 Disroute是一个Java项目的状态分发处理工具,能根据对象、json或者map里面的某个属性值分别执行不同的方法,通过方法解耦的方式,避免大量的if else判断,同时支持java se项目和spring项目 ## 适用场景 > * 大量if else的逻辑 > > * 消息通道里根据不同的状态值进行不同逻辑的处理,比如websocket或者其他 > > * 多态机制下根据不同的对象类型调用不同的方法 > > * 对话系统中根据不同的意图调用不同的服务 > > * 适配器模式或者策略模式场景等等 ## 使用教程 > 详细使用教程请访问[Disroute教程](http://106.13.93.117:48303) ### 1、引入maven依赖 ``` cn.langpy disroute 1.0.3 ``` ### 2、初始化 #### 2.1 Java se 场景下使用可以使用静态块进行初始化 ```java static{ Route.init(); /*Route.init()会进行全类扫描,可以指定项目包进行扫描*/ /*Route.init(“com.xxx”);*/ } ``` #### 2.2 springboot项目无需此步骤 ### 3、处理逻辑 #### 3.1 实体对象参数 ```java public String process(ParamData param){ return Route.dispatch(param); } ``` #### 3.2 map对象参数 ```java public String process(Map param){ return Route.dispatch(param); } ``` #### 3.3 json对象参数 ```java public String process(JSONObject param){ return Route.dispatch(param); } ``` #### 3.4 如果出现处理方法冲突的情况下,自定义一个上下文标识,会自动匹配带有@Route("/自定义标识")的类 ```java public String process(JSONObject param){ return Route.dispatch("context1",param); } ``` ### 4、处理方法定义 #### 4.1 默认写法 ```java import cn.langpy.disroute.annotation.Route; @Route /*有上下文标识的时候使用@Route("/context1")*/ public class Process{ /*ParamData对象的state==1时跳转执行该方法*/ /*参数类型和Route.dispatch(param)传入的类型保持一致 */ @Route("/state/1") public String state1(ParamData param){ /*这里写处理逻辑*/ return "我是state==1"; } /*ParamData对象的state==2时跳转执行该方法*/ @Route("/state/2") public String state2(ParamData param){ /*这里写处理逻辑*/ return "我是state==2"; } /*ParamData对象的state==其他数字 时跳转执行该方法 等价于else*/ @Route("/state/*") public String state2(ParamData param){ /*这里写处理逻辑*/ return "我是else"; } } ``` #### 4.2 spring bean使用 有些处理方法中需要注入spring的对象,加上@Component注解即可 ```java import cn.langpy.disroute.annotation.Route; import org.springframework.stereotype.Component; import javax.annotation.Resource; @Component @Route /*有上下文标识的时候使用@Route("/context1")*/ public class Process{ @Resource private UserService userService; /*ParamData对象的userType==student时跳转执行该方法*/ /*参数类型和Route.dispatch(param)传入的类型保持一致 */ @Route("/userType/student") public String state1(ParamData param){ /*这里写处理逻辑*/ return "我是userType==student"; } } ``` ## 版本说明 > V1.0.0:基本功能 ## 特别说明 1.本项目使用java8开发,其他版本未曾试验,如有什么bug还请告知!