1.拦截器是调用方法的改进.当称某个实例是拦截器是,这是就其行为上而言的;
2.从代码的角度来看,拦截器就是一个类,这个类也包含方法,只是这个方法是个特殊方 法,它会在目标方法调用之前“自动”执行
3.拦截器方法大都是通过代理的方式来调用的
4.jdk动态代理只能对实现了接口的实例来生成代理,因此必须提供一个接口:
(1)Dog.java接口
//代理接口
public interface Dog {
public void info();
public void run();
}
(2)DogImpl.java实现类
import com.Dog;
//DOc的实现类:
public class DogImpl implements Dog {
public void info() {
System.out.println("我是一直猎狗");
}
public void run() {
System.out.println("我奔跑迅速");
}
}
(3)DogIntercepter.java拦载器类
//拦截器类
public class DogIntercepter {
public void method1(){
System.out.println("模拟通用方法一");
}
public void method2(){
System.out.println("模拟通用方法二");
}
}
(4)ProxyHandler.java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
//关键是下面的ProxyHandler类,该类实现InvocationHandler接口,<该接口可以动态调用目标对象的方法>
public class ProxyHandler implements InvocationHandler {
private Object target;
DogIntercepter di = new DogIntercepter();
public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {
Object result = null;
if(method.getName().equals("info")){
di.method1();
result = method.invoke(target, args);
di.method2();
}else{
result = method.invoke(target, args);
}
return result;
}
public void setTarget(Object o){
this.target = o;
}
}
(5)TestDog.java测试类
import intercepterhandle.ProxyHandler;
import java.lang.reflect.Proxy;
import com.Dog;
import com.impl.DogImpl;
//测试类
public class TestDog {
/**
* @param args
*/
public static void main(String[] args) {
Dog targetObject = new DogImpl();//目标对象
Dog dog = null;
ProxyHandler handler = new ProxyHandler();
handler.setTarget(targetObject);
//第一个参数是用来创建动态代理的ClassLoader对象,只要该对象能访问Dog接口即可
//第二个参数是接口数组,正是代理该接口的数组
//第三个参数是代理包含的处理实例
Object proxy = Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
targetObject.getClass().getInterfaces(), handler);
if(proxy instanceof Dog){
dog = (Dog)proxy;//代理对象实际上也实现了接口Dog
}
dog.info();
dog.run();
}
}
分享到:
相关推荐
压缩包中的"loginIntercept"很可能包含了一个简单的登录拦截器示例。这个拦截器可能用于验证用户是否已登录,如果未登录,则重定向到登录页面。这在很多Web应用中是一个常见的需求,确保只有授权用户才能访问受保护...
这个"struts2拦截器应用小例子"可能包含了一个简单的拦截器实现,展示了如何在实际项目中集成和使用。通过这个例子,你可以学习到如何创建、注册拦截器,以及如何在Struts2框架中构建拦截器栈,从而更灵活地管理应用...
Struts2是一个强大的Java web应用程序...这个例子展示了如何创建一个简单的拦截器并在Struts2应用中使用它。实践中,拦截器可以用于处理诸如用户登录验证、性能监控等多种场景,极大地提高了代码的复用性和可维护性。
在Struts2中,拦截器是基于责任链模式实现的,多个拦截器可以形成一个拦截器栈,按顺序执行。 要创建自定义拦截器,我们需要遵循以下步骤: 1. **定义拦截器类**:创建一个实现`Interceptor`接口或者继承`...
Spring 拦截器是 Spring 框架中一个非常重要的组件,主要用于处理请求和响应,实现业务逻辑之前和之后的预处理和后处理。它为开发者提供了在 MVC 模式下实现统一处理机制的机会,比如权限验证、日志记录、性能监控等...
在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何利用拦截器来实现细粒度的用户权限管理。 首先,我们需要了解Struts2中的拦截器工作原理。拦截器是基于Java的动态代理模式实现的,它们按照配置的...
在Spring MVC框架中,拦截器(Interceptor)是一个强大的工具,用于在请求被控制器处理之前或之后执行特定的逻辑。它们可以用来实现通用的功能,如权限验证、日志记录、性能统计等,避免在每个控制器方法中重复代码...
例如,我们创建一个名为`LoggingInterceptor`的简单拦截器,用于记录每次请求的信息: ```java public class LoggingInterceptor extends AbstractInterceptor { @Override public String intercept...
在给定的例子中,我们创建了一个名为`SimpleInterceptor`的自定义拦截器,其主要目的是记录登录操作的时间消耗,并进行简单的用户名校验。 ```java package my; import java.util.Date; import ...
- 在Struts2中,拦截器是一个实现了`Interceptor`接口的类,它通过`ActionInvocation`对象来控制动作的执行流程。拦截器链是由多个拦截器按照指定顺序组成的,每个拦截器都可以在执行动作之前或之后进行操作。 2. ...
要创建一个简单的Struts拦截器,我们首先需要创建一个实现`Interceptor`接口的Java类。这个接口有一个`intercept()`方法,它是拦截器的核心,我们在其中编写处理逻辑。例如,我们可以创建一个名为`...
Spring MVC 拦截器是基于Java的Web开发框架Spring MVC中的一个重要组件,它允许开发者在请求被控制器处理之前或之后执行自定义逻辑。拦截器主要用于实现通用功能,如权限验证、日志记录、性能监控等,从而提高代码的...
Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的 拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器 三、定义Struts2拦截器。 ...
这个压缩包文件可能包含了一个简单的Struts2拦截器示例工程,对于初学者来说,这是一个很好的学习资源。 首先,我们来深入了解一下Struts2的拦截器机制。拦截器是在Action调用之前和之后执行的一段代码,可以用来...
本例子主要探讨了如何使用Struts2拦截器实现登录拦截,确保用户在没有正确登录的情况下无法访问受保护的页面。 首先,我们需要理解Struts2拦截器的工作原理。拦截器是基于Java的动态代理机制实现的,它们形成一个...
在这个简单的例子中,我们将聚焦于Spring AOP中的织入(Weaving)和织出(Ejbouting)拦截器的概念,这些在Spring MVC和SSM(Spring、SpringMVC、MyBatis)框架中非常常见,尤其是对于处理数据库操作的Mapper层。...
在这个“jdk动态代理 + 拦截器实现小例”中,我们将探讨如何利用Java的InvocationHandler接口和Proxy类来实现拦截器模式,以实现灵活的代码扩展和日志记录、性能监控等需求。 首先,让我们理解什么是动态代理。在...
`@Aspect`定义一个切面类,`@Around`定义一个环绕通知,即拦截器方法。 ```java @Component @Aspect public class MyAspect { @Around("execution(* com.example.service.*.*(..))") public Object ...
在本案例中,我们将探讨如何使用注解来实现拦截器,用于数据脱敏,这是保护敏感信息的一种常见方法。数据脱敏是指在展示或传输数据时,将敏感信息替换或隐藏,以确保隐私。 首先,让我们从`pom.xml`文件开始。在...