关于JDK动态代理
JDK动态代理:
1.接口
2.对接口进行实现。
3.创建代理类实现invcationHandler接口,并对Invoke方法重写。
Public Object invoke(Object proxy,Method method,Object[] args)throwsThrowable{
returnnull;
}
需要一个代理对象proxy,一个方法和一个object数组。
因为是JDK动态代理,所以这些数据需要动态的获取。
通过newProxyInstance(classLoader loader,Class<?>[] interfaces,invocationHandler h)
生成代理类$Proxy0,代理类继承了Proxy.所以java动态代理只能对接口进行代理,代理对象提供接口数组,可以任意进行调用。
CGLIB动态代理:
CGLib 的原理是对指定目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对 final 修饰的类进行代理。
代理类继承MethodInterceptor,并重写Intercept方法。
Public Object intercept(Object proxy,Method method,Object[] objects,MethodProxy methodProxy)
proxy:cglib生成代理对象,增强的对象
method:被代理对象的方法,对哪个方法进行拦截增强
Objects:方法参数,拦截的方法传入的参数
methodProxy:代理方法。要触发父类的方法的对象,也就是生成的子类方法去覆盖父类方法的那个方法。
在intercept方法中对MethodProxy调用invokeSuper方法。
调用:
什么是Enhancer?
Enhancer是cglib中使用频率很高的一个类,它是一个字节码增强器,可以用来为无接口的类创建代理。它的功能与java自带的Proxy类挺相似的。它会根据某个给定的类创建子类,并且所有非final的方法都带有回调钩子。
new一个Enhancer对象
Enhancer.setSuperClass(需要被代理的类,作为父类使用)
Enhancer.setCallback(代理类)
Callback也有很多类。一般用的代理类是MethodIntercept。也可以选用LazyLoader、NoOp(啥都不干)、Dispatcher、InvacationHandler、FixedValue、CallbackFilter
通过enhancer.create创建得到代理对象,通过代理对象调用目标方法
如果有必要就用指定的回调对象创建一个新的对象实例。也就是用代理类去创建一个新的子类。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!