当接口被调用时使用Spring拦截器注入运行时数据

17 篇文章 1 订阅

开发背景

使用CXF暴露与调用接口,为了方便追踪错误,所以想要在接口被调用时将一些运行时数据记录起来,所以就想到了拦截器。

CXF自带拦截器,但是据我初步了解,自带的拦截器都是经过封装,用来打印日志什么的,好像没有提供给开发者定制功能的方式(没有深入了解,如果有说错请方便斧正)

流程

其实Spring的拦截器使用挺方便的,实现org.aopalliance.intercept.MethodInterceptor接口中的invoke方法,在方法中实现想要的逻辑。然后在Spring配置文件中注入它就了事。

代码

拦截器实现方法

    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable {
        //获取当前被调用的方法
        Method method = invocation.getMethod();
        String methodName = method.getDeclaringClass().getSimpleName() + "." + method.getName();
        //执行被拦截器拦截下来的方法,获得其返回值
        Object object = invocation.proceed();
        //做自己的逻辑,我这里将被调用的方法信息放入返回值中。
        if (object instanceof SimpleResult) {
            SimpleResult result = (SimpleResult) object;
            result.createMsg(methodName);
        }
        return object;
    }

将拦截器注入IOC容器中

<bean id="resultLogInterceptor" class="com.elin4it.demo.interceptor.ResultLogInterceptor"/>

配置拦截器

<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <!--配置拦截器名-->
    <property name="interceptorNames">
        <list>
            <value>resultLogInterceptor</value>
        </list>
    </property>
    <!--要拦截的接口,可以使用通配符-->
    <property name="beanNames">
        <list>
            <value>*Facade</value>
        </list>

    </property>
</bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值