看完北京圣思园张龙老师的动态代理模式的视频后仿照着写的
一个接口:
public interface Target { void doSomething(); }
public class TargetImpl implements Target { @Override public void doSomething() { System.out.println("doSomething++++++++++++++++"); } }拦截器接口:
public interface Intercepter { void doBefore(); void doAfter(); }实现拦截器接口:
public class IntercepterImpl implements Intercepter { @Override public void doBefore() { System.out.println("doBefore++++++++++"); } @Override public void doAfter() { System.out.println("doAfter++++++++++++"); } }一个handler,实现了java.lang.reflect.InvocationHandler
import java.lang.reflect.InvocationHandler; public class Handler implements InvocationHandler { private Target target; private Intercepter intercepter; public Handler(Target target, Intercepter intercepter) { this.target = target; this.intercepter = intercepter; } public void setIntercepter(Intercepter intercepter) { this.intercepter = intercepter; } public void setTarget(Target target) { this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { intercepter.doBefore(); Object res = method.invoke(target, args); intercepter.doAfter(); return res; } }生成代理的类
public class Proxy { public Target getProxy(Target target, Intercepter intercepter) { Handler handler = new Handler(target, intercepter); return (Target) java.lang.reflect.Proxy.newProxyInstance(target .getClass().getClassLoader(), target.getClass().getInterfaces(), handler); } }测试类
public class Main { public static void main(String[] args) { Target target = new TargetImpl(); Intercepter intercepter = new IntercepterImpl(); target = new Proxy().getProxy(target, intercepter); target.doSomething(); } }