public interface Action {
public String execute() throws Exception;
}
public class TestAction implements Action {
public String execute() throws Exception {
System.out.println("action exe");
return "success";
}
}
public interface Interceptor {
public String intercept(ActionInvocation invocation) throws Exception;
}
public class Test1Intercpetor implements Interceptor{
public String intercept(ActionInvocation invocation) throws Exception{
System.out.println("hello!in test1");
String code= invocation.invoke();
System.out.println("end!in test1");
return code;
}
}
public class Test2Intercpetor implements Interceptor{
public String intercept(ActionInvocation invocation) throws Exception{
System.out.println("hello!in test2");
String code= invocation.invoke();
System.out.println("end!in test2");
return code;
}
}
public interface ActionInvocation {
public String invoke() throws Exception ;
}
public class DefaultInvocation implements ActionInvocation{
private List<Interceptor> interceptors =new ArrayList<Interceptor>();
private int index=-1;
private String result;
public String invoke() throws Exception {
if(index==interceptors.size()-1){
result=action.execute();
}else
{
index++;
result=((Interceptor)interceptors.get(index)).intercept(this);
System.out.println("????"+result);
}
return result;
}
public void addInterceptor(Interceptor interceptor){
interceptors.add(interceptor);
}
private Action action;
public Action getAction() {
return action;
}
public void setAction(Action action) {
this.action = action;
}
}
public class Test {
public static void main(String[] args){
DefaultInvocation d=new DefaultInvocation();
d.setAction(new TestAction());
d.addInterceptor(new Test1Intercpetor());
d.addInterceptor(new Test2Intercpetor());
try {
d.invoke();
} catch (Exception ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
}
分享到:
相关推荐
2. **如何实现**:Struts2提供了一个灵活的Interceptor框架,开发者可以通过实现Interceptor接口来自定义拦截器,也可以通过继承已有的拦截器实现来进行扩展。 3. **配置方式**:Interceptor的配置通过Struts2的配置...
总的来说,使用MyBatis的Interceptor实现分页是一种高效且灵活的方式,它减少了代码的重复,提高了代码的可维护性。通过对SQL执行过程的拦截,我们能够根据业务需求定制各种复杂的处理逻辑,而不仅仅局限于分页。在...
以下是一段简单的Interceptor实现的代码示例: ```java public class MyInterceptor implements ValueAnimator.AnimatorUpdateListener { @Override public void onAnimationUpdate(ValueAnimator animation) { ...
本文将深入探讨Interceptor框架的实现,主要涉及Java代理和反射技术。 首先,理解Interceptor(拦截器)的概念。拦截器是一种设计模式,它允许我们在方法调用前后插入自定义的行为。在诸如日志记录、性能监控、事务...
根据提供的部分内容,我们可以看到一个具体的Interceptor实现——`AccessInterceptor`,以及如何在Struts2配置文件中使用它: ```xml <interceptor name="auth" class=...
利用反射和动态代理机制实现自定义拦截器Interceptor 在本文中,我们将探讨如何利用反射和动态代理机制来实现自定义拦截器Interceptor。拦截器Interceptor是一种常见的设计模式,用于在方法调用前后执行某些操作,...
1. **src/main/java**:这里的源代码可能有自定义的Interceptor实现,继承自Spring的`HandlerInterceptor`接口,实现`preHandle`、`postHandle`和`afterCompletion`方法。 2. **src/main/resources**:可能包含...
同时,通过Interceptor实现了对请求和响应的精细控制,确保服务的安全性和性能。Sitemesh则用于统一整个Web应用的界面风格,提供一致的用户体验。 总结来说,这个项目展示了如何利用Maven进行项目管理,Spring MVC...
我们可以使用 Interceptor 来实现通用 Auth 认证。 首先,我们需要定义一个拦截器类 `AppkeyInterceptor`,该类需要实现 `HandlerInterceptor` 接口。然后,我们在 `preHandle()` 方法中判断是否需要拦截请求,如果...
在本场景中,我们使用Interceptor来实现性能监控功能,以追踪每个URL的执行时间。 `PerformanceInterceptor` 类实现了 `HandlerInterceptor` 接口,该接口定义了三个方法:`preHandle`、`postHandle` 和 `...
2. **自动化测试辅助**:Interceptor捕获的实际请求数据可以用于创建Postman集合,进一步实现API测试的自动化。 3. **模拟用户行为**:通过Interceptor修改请求参数,可以模拟不同的用户行为,这对测试各种边界条件...
2. **自动化测试**: 将Interceptor捕获的请求保存为Postman集合,可以方便地创建测试脚本,实现接口测试的自动化。 3. **协作与文档**: 通过Interceptor分享请求,团队成员可以复现问题,同时方便生成API文档。 4....
Ajax Interceptor 是一款专为谷歌浏览器(Chrome)设计的插件,它允许开发者在Ajax请求发送后和响应返回前进行干预,从而实现对AJAX请求数据的修改。这款插件对于前端开发、调试以及测试来说是一个强大的工具,特别...
1. **Interceptor实现类** SpringMVC提供了两种方式来创建Interceptor: - **实现HandlerInterceptor接口**:这是最常见的实现方式。HandlerInterceptor接口定义了`preHandle()`, `postHandle()`和`...
Interceptor 基本介绍 拦截器 Interceptor 是 Spring MVC 提供的一种 AOP(面向切面编程)思想的实现,它允许我们在请求被 Controller 处理之前或之后执行自定义逻辑。与 Filter 不同,Interceptor 更专注于 ...
1. **定义Interceptor实现类**:创建一个新的类并实现`Interceptor`接口。 2. **实现`intercept()`方法**:在此方法中编写具体的拦截逻辑。例如,在方法执行前后添加日志记录等。 3. **实现`plugin()`方法**:决定...
3. 工作流管理:支持任务分配、审批流程、状态跟踪等,可能利用Struts2的Action和Interceptor实现流程控制和状态管理。 4. 通知提醒:当有新的任务或消息时,系统应能及时通知用户,这可能需要邮件服务或消息队列的...
6.采用二进制运算实现权限控制,利用interceptor实现粗粒度控制以及重写struts2 标签实现细粒度权限控制.采用二位运算能够使得权限运算更加快捷,而且极大 降低 session存储量,有效利用服务器资源. .系统中通过 cxf ...
在本例中,我们探讨的是如何使用 MyBatis Interceptor 来实现分页功能,这对于处理大数据量的查询是至关重要的。 首先,我们需要了解 MyBatis Interceptor 的工作原理。Interceptor 类似于 Java 中的 AOP(面向切面...