如何替换掉,我们平常使用的 if...else,switch...case逻辑
整个流程 大概就是:项目启动时,以@HandlerType注解中的类型值作为key,注解修饰的 class 作为value,初始化到 map中,然后根据key动态取class。
懂了吧。
技术涉及:Spring 钩子 BeanFactoryPostProcessor
自定义注解(元注解)
具体详情请访问 三大不留点百度电卡姆 搜索
完整项目地址:https://github.com/tianzhiyuanemail/gandiao_ifelse
策略模式实现
利用策略模式,只需要两行即可实现业务逻辑:
type:传入值
a()方法:传入值所对应的业务方法
ok,让我们看看是咋实现的,首先定义了一个HandlerProcessor类,继承了 BeanFactoryPostProcessor,然后
1、扫描指定包中标有@HandlerType注解的类;
2、将@HandlerType注解中的类型值作为key,对应的类作为value,保存在Map中;
3、以上面的map作为构造函数参数,初始化HandlerContext,将其注册到spring容器中
(BeanFactoryPostProcessor是针对整个容器的后置处理器,他被触发时机是在IoC容器加载完各种配置后,还没执行Bean的初始化之前。)
ok, 再看看
AbstractHandler instance = handlerContext.getInstance(type); 中 handlerContext.getInstance(type)干了点啥:根据传入的值,在map中获取响应的 class(class:三个业务类),然后获取对应的bean。
ok,最后instance.a(); 就调用了,type值 所对应类中的业务逻辑方法,这就替代了 if(type == value){ 业务逻辑 } 。
ok,再看看AbstractHandler里面写了啥:
ok,再看看具体的每个业务方法:
ok,这里写了三个业务处理方法,都继承了AbstractHandler 类;
ok,再看看 这个自定义注解是咋写的
就是赋了个值。