使用CXF暴露与调用接口,为了方便追踪错误,因此想要在接口被调用时将一些运行时数据记录起来,因此就想到了拦截器。spring
CXF自带拦截器,可是据我初步了解,自带的拦截器都是通过封装,用来打印日志什么的,好像没有提供给开发者定制功能的方式(没有深刻了解,若是有说错请方便斧正)markdown
其实Spring的拦截器使用挺方便的,实现org.aopalliance.intercept.MethodInterceptor接口中的invoke方法,在方法中实现想要的逻辑。而后在Spring配置文件中注入它就了事。ide
拦截器实现方法日志
@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容器中code
<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>