1.InvocationHandler
官方文档:
proxy:
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h);
-
loader:一个classloader对象,定义了由哪个classloader对象对生成的代理类进行加载
-
interfaces:一个interface对象数组,表示我们将要给我们的代理对象提供一组什么样的接口,如果我们提供了这样一个接口对象数组,那么也就是声明了代理类实现了这些接口,代理类就可以调用接口中声明的所有方法。
-
InvocationHandler
// proxy:代理类代理的真实代理对象 // method:我们所要调用某个对象真实的方法的Method对象 // args:指代代理对象方法传递的参数 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable;
InvocationHandler实现
public class ProxyInvocationHandler implements InvocationHandler { //代理类中的真实对象 private Object target; public void setTarget(Object target) { this.target = target; } /** * 创建代理 * * @return */ public Object getProxy() { return Proxy.newProxyInstance(this.getClass().getClassLoader(), target.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Before(method.getName()); Object result = method.invoke(target, args); return result; } private void Before(String msg) { System.out.println("这是一个:" + msg + "方法"); } }
service:
public interface Service { void add(); void delete(); void update(); void query(); }
serviceImpl
public class ServiceImpl implements Service { @Override public void add() { System.out.println("新增一个操作"); } @Override public void delete() { System.out.println("删除一个操作"); } @Override public void update() { System.out.println("修改一个操作"); } @Override public void query() { System.out.println("查询一个操作"); } }
测试类:
public class Test { public static void main(String[] args) { ServiceImpl service = new ServiceImpl(); ProxyInvocationHandler pih = new ProxyInvocationHandler(); pih.setTarget(service); Service proxy = (Service) pih.getProxy(); proxy.add(); } }
输出结果:
这是一个:add方法
新增一个操作
浙公网安备 33010602011771号