package invocation; public interface PlayerInterface { public void kick(); } package invocation; public class Player implements PlayerInterface{ public void kick(){ System.out.println("我要踢球"); } } package invocation; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class PlayerHandler implements InvocationHandler { private Object target; public PlayerHandler(Object target) { this.target = target; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("start"); try { return method.invoke(target, args); } catch (Exception e) { e.printStackTrace(); } finally { System.out.println("over"); } return null; } public Object createObjectProxy(){ return Proxy.newProxyInstance( target.getClass().getClassLoader(), target.getClass().getInterfaces(), this ); } } package invocation; public class Test { public static void main(String[] args) { /* 真实对象 */ Player p = new Player(); /* handler处理类 */ PlayerHandler handler = new PlayerHandler(p); // 动态代理需要用接口去cast 如果实例cast则会报异常... // Exception in thread "main" java.lang.ClassCastException: $Proxy0 // Player player = (Player)handler.createObjectProxy(); PlayerInterface player = (PlayerInterface)handler.createObjectProxy(); player.kick(); } }