切入表达式细节及CGlib动态代理
2025-4-20
| 2025-4-20
Words 597Read Time 2 min
type
status
date
slug
summary
tags
category
icon
password

其他配置方式

notion image
image-20230217163315512

对没有实现接口的类插入代码片段

测试

结果

notion image
image-20230217163221512
可以看到,这样car对象也是代理对象,但是类型变成了cglib代理对象,他是另一种代理方式,一种是之前学到的jdk的动态代理,还有一种是cglib代理对象。

JDK动态代理和cglib代理的方式

https://www.cnblogs.com/threeAgePie/p/15832586.html
动态代理:在不改变原有代码的情况下上进行对象功能增强 使用代理对象代替原来的对象完成功能 进而达到拓展功能的目的

JDK Proxy 动态代理面向接口的动态代理

  1. 一定要有接口和实现类的存在 代理对象增强的是实现类 在实现接口的方法重写的方法
  1. 生成的代理对象只能转换成 接口的不能转换成 被代理类
  1. 代理对象只能增强接口中定义的方法 实现类中其他和接口无关的方法是无法增强的
  1. 代理对象只能读取到接口中方法上的注解 不能读取到实现类方法上的注解

CGlib动态代理

cglib动态代理模式是面向父类
特点:
  1. 面向父类的和接口没有直接关系 2.不仅可以增强接口中定义的方法还可以增强其他方法 3.可以读取父类中方法上的所有注解

两个动态代理的区别

  1. JDK动态代理是面向接口的,只能增强实现类中接口中存在的方法。CGlib是面向父类的,可以增强父类的所有方法
  1. JDK得到的对象是JDK代理对象实例,而CGlib得到的对象是被代理对象的子类
JDK代理只能是实现接口的类才能使用,而CGlib不依赖于接口,可以直接生成类的代理对象。
列表遍历切入点表达式重用和执行顺序
Loading...