1. 程式人生 > >java反射機制實現攔截器

java反射機制實現攔截器

tor 攔截 stat 重要 obj static interface 程序 bject

實現一個攔截器必須要實現一下幾個類: 1 目標類接口:目標類要實現的接口。 package com.lanvis.reflect; public interface ITarget { public void doSthing(); public void doOthing(); } 2 目標類:目標類是要被攔截的類。它實現了目標類接口。 package com.lanvis.reflect; public class Target implements ITarget { public void doOthing() { System.out.println("doOthing"); } public void doSthing() { System.out.println("doSthing"); } } 3 攔截器
類:目標類中的方法被攔截之後,執行攔截器中的方法。 package com.lanvis.reflect; public class Interceptor { public void before(){ System.out.println("before"); } public void after(){ System.out.println("after"); } } 4 處理器類:正是處理器把攔截器和目標類耦合在一起。 package com.lanvis.reflect; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; 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 代理類:程序執行時真正執行的是代理類,代理類是實現了攔截器
的流程的類。 package com.lanvis.reflect; import java.lang.reflect.Proxy; public class MyProxy { public Object getProxy(Object object) { MyHandler myHandler = new MyHandler(); myHandler.setObject(object); return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), myHandler); } } 6 測試類:用來測試攔截器
成功與否。 package com.lanvis.reflect; public class Test { public static void main(String[] args){ ITarget target=new Target(); MyProxy myProxy=new MyProxy(); ITarget proxy=(ITarget)myProxy.getProxy(target); proxy.doSthing(); proxy.doOthing(); } } 註:認真學習java反射機制,這很重要。

java反射機制實現攔截器