package com; public interface IComponent { public void business1() ; public void business2() ; public void business3() ; }package com;
public class Component implements IComponent{ public void business1() { System.out.println("业务1"); } public void business2() { System.out.println("业务2"); } public void business3() { System.out.println("业务3"); } }
package com;
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class DynamicProxy implements InvocationHandler { private Object obj; //private DynamicProxy p; public Object bindl(Object obj) { this.obj = obj; System.out.println("我是bind*****"); return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj .getClass().getInterfaces(),this);// 用来动态装载invoke方法的 // return new DynamicProxy() ; //创建代理类 实例化了一个代理类 } // 动态调用的 不需要手的设置装载 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub // System.out.println(proxy.getClass()); // System.out.println(method.getClass()); Object result = null; try { valiateUser(); // System.out.println(proxy.getClass()); // System.out.println(args); // System.out.println(method.getClass()); result = method.invoke(obj,args);// 调用方法 obj // System.out.println(result); System.out.println("************"); } catch (Exception e) { e.printStackTrace(); } return result; } public void valiateUser() { System.out.println("验证用户。。。。"); } }
package com;
public class TestD { public static void main(String args[]){ DynamicProxy proxy = new DynamicProxy(); IComponent component=(IComponent) proxy.bindl(new Component()); component.business1();//先调用它的invoke方法 再在他的invoke方法里面加载类 component.business2(); component.business3(); } }