- 利用代理可以在运行时创建一个实现了一组给定接口的新类
- 代理分为三个 静态代理、动态代理、cglib
- 先说三种的特点:
- 静态代理:代理要实现接口;可以在不修改目标对象的前提下扩展目标对象的功能 ;编译产生字节码,直接使用,速度快。
- 动态代理:代理不用实现接口,但是目标对象要实现接口;用的反射技术,相对消耗资源。
- cglig:代理无需实现接口;性能比反射好;底层是小而快的ASM框架实现。
静态代理
主要就是静态代理需要实现类。网上有很多例子,一看就明白。
动态代理
创建一个代理对象,需要使用Proxy类中的newProxyInstance方法,这个方法有三个参数
- 类加载器
- Class对象数组
- 处理器
Object proxy = Proxy.newProxyInstance(ClassLoader,Class,handler)
代理都要实现InvocationHandler,然后实现invoke方法,主要是在invoke中实现操作。
没有定义代理类的名字,Sun虚拟机中的Proxy类将生成一个$Proxy开头的类名
cglig
- 底层是用的ASM,没去了解 哈哈哈哈,知道是小而快的东西
- 在Spring的AOP中使用了
参考了他的文章Java三种代理模式:静态代理、动态代理和cglib代理
可以看看,他写的比我好些,我只是总结一些自己的东西