SpringBank 开发日志 一种简单的拦截器设计实现

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

/**
 * @author wangxin
 * @contact [email protected]
 * @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;
    }
}
时间: 2024-10-15 11:28:16

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

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

iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所

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

iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所

iOS开发中三种简单的动画设置

iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所有动画提交并生成动

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

对于所有的AOP框架来说,多个拦截器最终会应用到某个方法上.这些拦截器按照指定的顺序构成一个管道,管道的另一端就是针对目标方法的调用.从设计角度来将,拦截器和中间件本质是一样的,那么我们可以按照类似的模式来设计拦截器. 一.InvocationContext 我们为整个拦截器管道定义了一个统一的执行上下文,并将其命名为InvocationContext.如下面的代码片段所示,我们可以利用InvocationContext对象得到方法调用上下文的相关信息,其中包括两个方法(定义在接口和实现类型),

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

 1. Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2  spring-mvc结构 DispatcherServlet:中央控制器,把请求给转发到具体的控制类 Controller:具体处理请求的控制器(配置文件方式需要配置,注解方式不用配置) handlerMapping:映射处理器,负责映射中央处理器转发给controller时的映射策略 ModelAndView:服务

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

之前想的比较简单,请求到达controller的时候,传给action的参数没有经过任何封装,就是一个Map.然后action再调用service的时候,传递的参数也是map @Controller public class DepositController extends BaseController{ @TransactionMapping(transaction = "Deposit") public Map Deposit(Map request) { Map map = c

springbank 开发日志 springbank是如何执行一个handler的requestMapping对应的方法的

占位 从dispatcher说起,方法doDispatch(Map request)的参数request是一个通过解析来报报文新城的map 要以request为参数执行一个handler,自然要先找到这个handler,这个工作是由getHandler(request)完成,其实找到的是handlerExecutionChain,是一个包含了拦截器链和真正的handler在内的执行链, 方法内的步骤建立在handlerMappings的基础上,

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

一.首尾式动画 // beginAnimations表示此后的代码要"参与到"动画中     [UIView beginAnimations:nil context:nil]; //设置动画时长     [UIView setAnimationDuration:2.0];            self.headImageView.bounds = rect;     // commitAnimations,将beginAnimation之后的所有动画提交并生成动画     [UIVi

springbank 开发日志 阅读spring mvc的源代码真是受益良多

决定模仿spring mvc的dispatcher->handlerMapping(return executorChain)->handler.execute 这样的流程之后,就开始看spring mvc的源代码. 因为我也自定义了标签,来做交易名映射,根据交易名找到处理类.所以我着重需要看的,就是spring mvc是如何根据url找到对应的handler的. 既然要找,首先要有个找的地方,spring mvc是这样做的,它搞了AbstractDetectingUrlHandlerMapp