java基础-动态代理
代理分2种,静态代理和动态代理
静态代理:
代理模式中的所有角色(代理对象、目标对象、目标对象的接口)等都是在编译期就确定好的。
代理好处:
静态代理的用途 控制真实对象的访问权限 通过代理对象控制对真实对象的使用权限。
避免创建大对象 通过使用一个代理小对象来代表一个真实的大对象,可以减少系统资源的消耗,对系统进行优化并提高运行速度。
增强真实对象的功能 这个比较简单,通过代理可以在调用真实对象的方法的前后增加额外功能
动态代理:
动态代理中的代理类并不要求在编译期就确定,而是可以在运行期动态生成,从而实现对目标对象的代理功能。
反射是动态代理的一种实现方式。
有2种动态代理的实现方式:
1、JDK 动态代理:
java.lang.reflect 包中的 Proxy 类和 InvocationHandler 接口提供了生成动态代理类的能力。
2、Cglib 动态代理:Cglib (Code Generation Library )是一个第三方代码生成类库,运行时在内存中动态生成一个子类对象从而实现对目标对象功能的扩展。
区别:
JDK 动态代理和 Cglib 动态代理的区别 JDK 的动态代理有一个限制,就是使用动态代理的对象必须实现一个或多个接口。如果想代理没有实现接口的类,就可以使用 CGLIB实现。