当交易由Action进入Service之前,需要根据不同的Service实际负责业务的不同,真正执行Service的业务逻辑之前,做一些检查工作。这样的拦截器应该是基于配置的,与Service关联起来的。

/**
* @author wangxin
* @contact 408657544@qq.com
* @date Jul 22, 2017
* @Description: 所有TransactionController的抽象父类,主要作用为以一种低耦合的方式调用Service
*/
public abstract class BaseController {
private final Logger log = LoggerFactory.getLogger(getClass());
@SuppressWarnings("rawtypes")
public Map callService(String service,Map request) {
Class<?> clazz;
try {
clazz = Class.forName("com.springbank.service.service." + service);
Method method = clazz.getMethod("execute", Map.class);
Service bean = (Service) ApplicationContextUtil.getApplicationContext().getBean(clazz);
//先执行拦截器栈
List<Interceptor> interceptorList = (List<Interceptor>) clazz.getMethod("getInterceptorList", null).invoke(bean, null);
for (Interceptor interceptor : interceptorList) {
interceptor.process();
}
//反射非静态方法,需要把第一个参数设置为对象
return (Map)method.invoke(bean, request);
} catch (ClassNotFoundException e) {
ExceptionHandler.throwExcep(ExpceptionMapping.SYSTEMERR, e);
} catch (NoSuchMethodException e) {
ExceptionHandler.throwExcep(ExpceptionMapping.SYSTEMERR, e);
} catch (SecurityException e) {
ExceptionHandler.throwExcep(ExpceptionMapping.SYSTEMERR, e);
} catch (IllegalAccessException e) {
ExceptionHandler.throwExcep(ExpceptionMapping.SYSTEMERR, e);
} catch (IllegalArgumentException e) {
ExceptionHandler.throwExcep(ExpceptionMapping.SYSTEMERR, e);
} catch (InvocationTargetException e) {
ExceptionHandler.throwExcep(ExpceptionMapping.SYSTEMERR, e);
}
return null;
}
}

SpringBank 开发日志 一种简单的拦截器设计实现的更多相关文章

  1. iOS开发UI篇—iOS开发中三种简单的动画设置

    iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...

  2. AOP框架Dora.Interception 3.0 [3]: 拦截器设计

    对于所有的AOP框架来说,多个拦截器最终会应用到某个方法上.这些拦截器按照指定的顺序构成一个管道,管道的另一端就是针对目标方法的调用.从设计角度来将,拦截器和中间件本质是一样的,那么我们可以按照类似的 ...

  3. 04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s

     1. Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2  spring-mv ...

  4. SpringBank 开发日志 重新设计Action调用Service的参数传递 使用泛型解决类型转换问题

    之前想的比较简单,请求到达controller的时候,传给action的参数没有经过任何封装,就是一个Map.然后action再调用service的时候,传递的参数也是map @Controller ...

  5. springmvc实现简单的拦截器

    SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的.在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方 ...

  6. 配置简单的拦截器java中

    springMVC.xml文件中==== <!-- 拦截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:map ...

  7. springbank 开发日志 springbank是如何注册handler的

    这要从DefaultAnnotationHandlerMapping这个类说起,该类被@Component注释,该类被Spring IOC容器实例化之后,将会执行其initApplicationCon ...

  8. SpringBank 开发日志 使用maven构建dubbo服务的可执行jar包

    写这篇日志的时候,我已经完成了这个目标,并且中间经历了一次面试.现在回过头看,已经觉得印象不那么深刻了,果然还是一边思考,一边记录这样最好.但我还是严格要求自己,从新做了梳理,对相关配置进行了整理和说 ...

  9. SpringBank 开发日志 Mybatis 使用redis 作为二级缓存时,无法通过cacheEnabled=false 将其关闭

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...

随机推荐

  1. C++字符串(srtring)反转

    对称平方数 题目描述 打印所有不超过n(n<256)的,其平方具有对称性质的数.如11*11=121. 分析: 1.首先使用函数to_string将int转化为string: 2.然后将字符串反 ...

  2. html5 实时监听输入框值变化的完美方案:oninput & onpropertychange

    结合 HTML5 标准事件 oninput 和 IE 专属事件 onpropertychange 事件来监听输入框值变化. H5手机端: <input type="text" ...

  3. Java Web之路(五)JSP

    一.jsp的3个指令 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指令: p ...

  4. Newtonsoft.Json 两个Attribute含义

    1.[JsonIgnore] 看名字就知道了,通过这个Attribute可以忽略序列化某个实体类字段 2.[JsonProperty("Font")] 设置序列化到json中的实际 ...

  5. 16. Spring boot 错误页面

      默认效果:1).浏览器,返回一个默认的错误页面 1.1 请求头 1.2返回结果 2).如果是其他客户端,默认响应一个json数据 2.1请求头 2.2返回结果 { "timestamp& ...

  6. input单选框多选框时可用的事件

    change(): 当元素的值发生改变时,会发生 change 事件. 该事件仅适用于文本域(text field),以及 textarea 和 select 元素. change() 函数触发 ch ...

  7. bzoj 4184: shallot (线段树维护线性基)

    题面 \(solution:\) 这一题绝对算的上是一道经典的例题,它向我们诠释了一种新的线段树维护方式(神犇可以跳过了).像这一类需要加入又需要维护删除的问题,我们曾经是遇到过的像莫对,线段树... ...

  8. 【SVN】svn使用方法

    下载安装TortoiseSVN 下载地方 安装成功后 TortoiseSVN清除凭证 右击空白处-TortoiseSVN-Settings打开Settings窗口后做如下操作: svn在idea中的使 ...

  9. python manage.py syncdb Unknown command: 'syncdb'问题解决方法

    在django1.9后的版本中,python manage.py syncdb命令修改为python manage.py migrate,执行正常. 选择sqlite可视化sqlitestudio-3 ...

  10. es集群数据库~基本安装

    1 安装java环境   yum -y install java-1.8.0-openjdk*->需要最新的JDK环境1.82 安装 es   curl -L -O https://artifa ...