我们知道在Spring中一共提供了四种Advice用来支持对方法调用时施加的不同行为.它们包括:
BeforeAdvice:具体接口:MethodBeforeAdvice 在目标方法调用之前调用的Advice
AfterAdvice:具体接口:AfterReturningAdvice 在目标方法调用并返回之后调用的Advice
AroundAdvice:具休接口:MethodInterceptor 在目标方法的整个执行前后有效,并且有能力控制目标方法的执行
ThrowsAdvice:具体接口:ThrowsAdvice 在目标方法抛出异常时调用的Advice
在以上四种Advice中最为特别的就是MethodInterceptor:方法拦截器.它的特别之处在于:首先他所在的包并不Srping中的包而是:org.aopalliance.intercept包.即MethodInterceptor实现了AOP联盟接口,这一点保证了它较之其他的Advice更具有通用性,因为它可以在任何基于AOP联盟接口实现的AOP系统中使用.第二点也就是其最为突出的一点就是它所具有的其他Advice所不能匹敌的功能:在目标方法的整个执行前后有效,并且有能力控制目标方法的执行!以下是一段具体代码(引自Spring in Action iist3.5.)
package com.springinaction.chapter03.store;
import java.util.HashSet;
import java.util.Set;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class OnePerCustomerInterceptor implements MethodInterceptor {
private Set customers = new HashSet();
public Object invoke(MethodInvocation invocation)
throws Throwable {
Customer customer = (Customer) invocation.getArguments()[0];
if (customers.contains(customer)) {
throw new KwikEMartException("One per customer.");
}
Object squishee = invocation.proceed(); //调用目标方法
customers.add(customer);
return squishee;
}
}
在MethodInterceptor中有一个invoke方法,它们有一个MethodInvocation参数invocation,MethodInterceptor是能通过invocation的proceed方法来执行目标方法的.在显式地调用这个方法时,我们可以在其之前和之后做一些相关操作,实现beforeAdvice和AfterAdvice的功能.
分享到:
相关推荐
STRUTS2:拦截器Interceptor
https://blog.csdn.net/qq_43499543/article/details/117533295
主要介绍了spring boot加入拦截器Interceptor过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
弹簧方法拦截器 该示例显示了一个HandlerInterceptor来拦截Web调用并注销注释值。 此示例使用启动2,唯一的区别是您将使用WebMvcConfigurer注册拦截器。
spring boot jwt 和 interceptor的例子。 其中jwt的例子网上有很多,但是都是要数据库支持,这个只是用假数据模拟,不需要数据库支持。另外还有一个拦截器的简单例子。已经在sts 4 测试通过。
SpringAOP与SpringMVC拦截器两种方式实现权限管控,前台xml读取配置根据登录用户判断button是否enable
logging-interceptor-3.14.4的jar包,用于okhttp网络拦截器
spring+springmvc+Interceptor+jwt+redis实现sso单点登录.zip
OpenTracing Spring Web工具 该库为Spring Web应用程序(Boot,MVC和WebFlux)提供了工具。 它为服务器请求以及客户端请求( RestTemplate , AsyncRestTemplate和WebClient )创建跟踪数据。 与 如前所述,该库仅...
postman interceptor
Postman-Interceptor下载
InterCeptor
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.interceptor.TransactionInterceptor#0': Error setting property values; nested ...
:warning: 该项目现在是EE4J计划的一部分。 该仓库已被归档,因为所有活动现在都在。 有关整体EE4J过渡状态,请参见。javax.interceptor javax.interceptor API的存储库
详细介绍struts2 interceptor
通过代理和反射实现一个Interceptor框架
开发工具IntelliJ IDEA15,maven构建工程,使用spring4.1.1,demo集成jackson传输json,hibernate-validator校验数据,mybatis数据库持久框架,拦截器interceptor,aop构建事务等,让你快速入门spring
注意:flume-interceptor-1.0-SNAPSHOT.jar flume-interceptor-1.0-SNAPSHOT.jar flume-interceptor-1.0-SNAPSHOT.jar flume-interceptor-1.0-SNAPSHOT.jar flume-interceptor-1.0-SNAPSHOT.jar flume-interceptor-...