一、静态代理的问题
违反了开闭原则,每代理一个接口,就要修改代理类
二、动态代理的原理
1、对象的生命周期
java文件 ——>字节码文件——>class 对象——>生成对象——>销毁
2、动态代理的过程
Foo f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(), new Class<?>[] { Foo.class }, handler);
不通过java文件,自己生成字节码,然后生成class对象,最后生成代理对象
生成字节码时,已经继承了Proxy父类,实现了要代理的接口;
生成class对象,用到了classloader和字节码
生成代理对象时,把用来增强的处理类InvocationHandler传入