`

Struts2(8):拦截器的简单实现原理

阅读更多
什么是拦截器:
拦截器,在AOP(Aspect-Oriented Programming)中用于在执行目标对象某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。
下面模拟拦截器的实现,一共需要5个类:
1,目标对象接口 TargetInterface.java
2,目标对象接口实现类  Target.java
3,拦截器类  Interceptor.java
4,处理器类 MyHandler.java
5,代理类 MyProxy.java

1,TargetInterface接口中声明一个doSomething方法
public interface TargetInterface {
   public void doSomething();
}

2,Target 类实现TargetInterface接口,并实现doSomething方法
public class Target implements TargetInterface {

	public void doSomething() {
		System.out.println("do something");
	}

}

3,Interceptor.java拦截器中定义两个方法,分别执行在目标对象方法前,后执行。
public class Interceptor {
	public void before(){
		System.out.println("before...");
	}
	public void after(){
		System.out.println("after...");
	}
}

4,在处理器类MyHandler类中将目标对象与拦截器类关联起来,使用反射调用目标对象,并在执行目标对象方法前后执行拦截器中的方法。
public class MyHandler implements InvocationHandler {

	private Object object;

	private Interceptor interceptor = new Interceptor();

	public void setObject(Object object) {
		this.object = object;
	}

	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		Object result = null;
		interceptor.before();
		result = method.invoke(object, args);
		interceptor.after();
		return result;
	}

}

5,在代理类MyProxy中声明处理器类,通过动态代理调用处理器类。
public class MyProxy {
	public Object getProxy(Object object){
		MyHandler myhandler = new MyHandler();
		myhandler.setObject(object);
		return Proxy.newProxyInstance(Target.class.getClassLoader(), object.getClass().getInterfaces(), myhandler);
	}
}



最后写一个测试类来进行测试:
public class Client {
	public static void main(String[] args) {
		TargetInterface target = new Target();
		MyProxy myProxy = new MyProxy();
		TargetInterface proxy = (TargetInterface)myProxy.getProxy(target);
		proxy.doSomething();
	}
}

结果将打印出
before
do something
after
分享到:
评论

相关推荐

    浅谈Struts2拦截器的原理与实现.docx

    以下是对Struts2拦截器原理与实现的详细解析: 1. **拦截器的概念** Struts2拦截器是一种AOP(面向切面编程)的实现,它可以在不修改Action代码的情况下,通过定义拦截器并在配置文件中设置拦截器链,来动态地添加...

    Struts2拦截器实现权限控制demo

    首先,我们需要了解Struts2中的拦截器工作原理。拦截器是基于Java的动态代理模式实现的,它们按照配置的顺序在Action执行之前和之后执行。通过实现`Interceptor`接口或继承`AbstractInterceptor`类,我们可以创建...

    struts2拦截器应用小例子

    这个"struts2拦截器应用小例子"可能包含了一个简单的拦截器实现,展示了如何在实际项目中集成和使用。通过这个例子,你可以学习到如何创建、注册拦截器,以及如何在Struts2框架中构建拦截器栈,从而更灵活地管理应用...

    创建自己struts2拦截器

    Struts2是一个强大的MVC框架,它通过使用拦截器(Interceptor)来实现业务逻辑与表现层的解耦,提供了一种灵活的扩展机制。在Struts2中,拦截器是AOP(面向切面编程)的一种实现,它可以监控、修改或增强方法调用的...

    利用struts2拦截器做的简单登录

    本文将深入探讨如何利用Struts2的拦截器实现简单的登录功能。拦截器是Struts2框架的核心组件之一,它允许我们在动作执行前后插入自定义逻辑,比如权限验证、日志记录等。 首先,我们来理解一下Struts2拦截器的工作...

    struts2拦截器国际化

    在Struts2中,拦截器(Interceptor)是实现业务逻辑控制和增强功能的重要机制,而国际化(Internationalization,简称i18n)则能帮助我们构建支持多语言的Web应用。下面将详细解释这两个知识点以及它们如何在Struts2...

    struts2拦截器原理

    本文将深入探讨Struts2拦截器的原理,并通过一个简单的实例来帮助你理解其工作方式。 首先,让我们理解什么是拦截器。在软件设计模式中,拦截器是一种“链式处理”模式,它允许在动作执行前后插入自定义逻辑。在...

    12 struts2拦截器

    在Struts2中,创建一个拦截器非常简单,只需要实现`Interceptor`接口或者继承`AbstractInterceptor`抽象类。通常,我们会选择继承`AbstractInterceptor`,因为它提供了一些基本的方法和属性。然后在`intercept()`...

    Struts拦截器及token拦截器防止重复提交例子源码

    Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的 拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器 三、定义Struts2拦截器。 ...

    Struts2的拦截器的小例子程序

    ### Struts2拦截器原理与实战案例解析 #### 一、Struts2拦截器概述 Struts2框架作为Java Web开发中的重要工具之一,其核心优势在于强大的MVC架构支持和丰富的扩展性。其中,拦截器(Interceptor)是Struts2框架的...

    Struts2 拦截器 和 Java 中的动态代理

    在Struts2中,ActionInvocation接口代表了Action的执行过程,它可以被视为一个简单的调用栈,每个拦截器都是栈上的一个元素。当调用`invoke()`方法时,会按顺序执行这些拦截器,直到到达Action。这个设计模式与Java...

    简单介绍Struts2中的拦截器的小示例

    在Struts2中,拦截器(Interceptor)是实现业务逻辑控制和增强功能的重要组件,它们按照预定义的顺序执行,可以理解为一系列在动作执行前后插入的“中间件”。 拦截器的工作原理是在Action调用之前和之后执行,通过...

    struts拦截器的例子

    Struts拦截器是Java Web开发中的重要概念,尤其在基于Struts 2框架的应用中扮演着核心角色。这个"struts拦截器的例子"提供了一个学习和理解拦截器工作原理的起点,非常适合对这一主题感兴趣的初学者。 Struts 2框架...

    Struts2技术内幕 深入解析Struts架构设计与实现原理

    ### Struts2技术内幕:深入解析Struts架构设计与实现原理 #### Struts2概述 Struts2是Apache Software Foundation支持的一个开源项目,它是Struts1的下一代版本,继承了Struits1的优点,并在此基础上进行了大量的...

    struts1.2拦截器使用插件

    2. **注册拦截器**:在`struts-config.xml`配置文件中,通过`<interceptors>`标签定义拦截器栈,然后通过`<action>`标签的`interceptor-ref`属性引用拦截器栈。 3. **配置拦截器栈**:在`struts-config.xml`中,...

    struts2拦截器时序图

    总结来说,Struts2拦截器及其时序图展示了拦截器在Action处理过程中的工作原理和顺序。通过拦截器链,开发者可以灵活地对Action的调用进行增强和控制,实现诸如数据校验、日志记录等功能,这些功能是构建企业级Java ...

    Struts2拦截器及其用法详细说明

    Struts2 拦截器是Struts2框架的核心组件之一,它们允许开发者在Action执行前后插入自定义逻辑,实现跨切面的功能。拦截器基于Java的动态代理机制,能够独立于Action和Struts2框架进行扩展和复用。下面我们将深入探讨...

    struts2中的拦截器

    其中,拦截器(Interceptor)是Struts2框架的核心特性之一,用于增强Action的处理能力,实现业务逻辑与控制流程的分离。在Struts2中,拦截器扮演着类似于过滤器的角色,但它们更专注于处理Action执行前后的逻辑。 ...

    简单Struts2拦截器

    本文将深入探讨“简单Struts2拦截器”的概念、工作原理及其实例。 ### 1. 拦截器概述 在Struts2框架中,拦截器是一种插件机制,它可以拦截用户的HTTP请求,在Action执行前后进行额外的操作,如日志记录、权限检查...

    struts2拦截器

    拦截器是 Struts2 框架中实现业务逻辑控制、权限验证、日志记录等功能的重要手段,极大地提高了代码的可复用性和可维护性。 1. **拦截器的基本原理** - 在 Struts2 中,拦截器的工作方式类似于过滤器(Filter),但...

Global site tag (gtag.js) - Google Analytics