开发背景
使用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>
时间: 2024-10-13 21:58:03