拦截器实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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();
}
}