public class Main { //如果有修改,或者接口增加了方法,都需要更改SaleMan public static void main(String[] args) { Man man = new Man(); SalesMan salesMan = new SalesMan(man); salesMan.bindCard(); salesMan.loseCard(); } }
public class DynamicClient { public static void main(String[] args) { Man man = new Man(); //获取代理 动态代理其实是代理了所有的方法,而且会走BankInvocationHandler里面的invoke方法 IBank proxy = (IBank) Proxy.newProxyInstance(IBank.class.getClassLoader(), //接口数组 new Class<?>[]{IBank.class}, //回调 new BankInvocationHandler(man)); //动态代理,解析interface中的所有方法,新建一个(包名+$Proxy)的class //实例化了Proxy对象,porxy里面的InvocationHandler //每次调用方法其实执行的是InvocationHandler里面的invoke proxy.bindCard(); proxy.loseCard(); }
private static class BankInvocationHandler implements InvocationHandler { private final IBank man;
public BankInvocationHandler(Man man) { this.man = man; }