拦截器实例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

功能执行类:

Java代码

1.

2.//执行功能类

3.public class ExecuteFunction implements ExecuteFunctionInterface {

4. //执行功能类执行方法

5. public void execute() {

6. System.out.println("execute something...");

7. }

8.}

功能执行接口:

Java代码

1.

2.//执行功能接口

3.public interface ExecuteFunctionInterface {

4. public void execute();

5.}

拦截器类:

Java代码

//拦截器类

public class Interceptor {

//拦截执行功能类之前执行方法

public void beforeDoing(){

System.out.println("before doing Something...");

}

//拦截执行功能类之后执行方法

public void afterDoing(){

System.out.println("after doing Something...");

}

}

拦截器处理类:

Java代码

1.

2.import ng.reflect.InvocationHandler;

3.import ng.reflect.Method;

4.//拦截器处理类

5.public class InterceptorHandler implements InvocationHandler {

6. private Object object;

7.

8. private Interceptor inter = new Interceptor();

9.

10. //设置需要拦截的执行功能类

11. public void setObject(Object object) {

12. this.object = object;

13. }

14.

15. //接口invoke方法,proxy是代理实例,method是实例方法,args是代理类传入的方法参数。

16. public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

17. inter.beforeDoing();

18.

19. //object提供该方法的类实例,args是调用方法所需的参数值的数组

20. Object returnObject = method.invoke(object, args);

21. inter.afterDoing();

22. return returnObject;

23. }

24.}

//object提供该方法的类实例,args是调用方法所需的参数值的数组

Object returnObject = method.invoke(object, args);

inter.afterDoing();

return returnObject;

}

}

代理对象类:

Java代码

import ng.reflect.Proxy;

public class ProxyObject {

private InterceptorHandler handler = new InterceptorHandler();

//得到执行类的代理对象实例

public Object getProxy(Object object) {

handler.setObject(object);

//创建对象实例

return Proxy.newProxyInstance(

ExecuteFunction.class.getClassLoader(),

object.getClass().getInterfaces(),

handler);

}

}

测试程序:

//测试执行类和拦截器类是否执行

public class TestInterceptor {

public static void main(String[] args) {

ExecuteFunctionInterface test = new ExecuteFunction();

//得到执行类的一个代理对象实例

ExecuteFunctionInterface resultObject = (ExecuteFunctionInterface) new ProxyObject() .getProxy(test);

//代理对象执行

resultObject.execute();

}

}

相关文档
最新文档