浅谈SpringBoot的动态代理
一、动态代理是什么?
代理就是面向切面编程(AOP)的一种实现,白话讲就是代替别人打理事务,我们平时使用的Spring AOP就是面向切面编程的一种实现,而动态代理就是AOP的底层原理。
二、代理分类
静态代理:在程序运行前就已经存在的代理类的字节码文件,代理对象和真实对象的关系在运行前就已经确定了。
动态代理:代理类就是在程序运行期间由JVM通过反射机制动态的生成,所以不存在代理类的字节码文件,动态生成字节码文件对象,代理对象和真实对象的关系在程序运行时期才确定的。
三、动态代理的实现方式
针对有接口使用JDK动态代理,需要使用java.lang.reflect包中的Proxy类与 InvocationHandler 接口。
针对没有使用接口使用CGLIB或javassist组件。
四、两者区别
静态代理优点:
业务类只需要关注业务逻辑本身,保证了业务类的重要性。
把真实对象隐藏起来,保护真实对象
缺点:
代理对象的额某个接口只服务于某种类型的对象,谁需要谁就创建。
若需要代理的方法很多,则要为每一种方法都进行代理处理
若借口添加了一个方法,不仅仅只有实现类实现,代理类也需要实现
动态代理优点:
不需要手动区创建代理类
缺点:
真实类必须实现接口
对多个真实类代理的话,Spring配置较多

浙公网安备 33010602011771号