java代理Proxy以及实际PRC场景中的使用

Apache与Nginx核心差异:进程模型、事件驱动与生产配置实践 Web服务器是现代应用交付的基石,其底层架构直接决定并发能力、资源开销与运维韧性。Apache基于多进程/多线程MPM模型,强调模块深度集成与运行时稳定性,适合PHP嵌入式部署和强认证场景;Nginx则采用异步非阻塞事件驱动架构,以极低内存支撑高并发,依赖FastCGI等标准协议实现语言解耦。这种根本性设计差异,导致二者在HTTPS配置、反向代理健壮性、大文件上传(413错误)定位路径、Brotli压缩支持及配置容错机制上表现迥异。理解进程模型与事件循环原理,是规避502网关错误、if指令陷阱、SSL环境变 阅读详情

代理(Proxy)

代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.

这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法

定义:给目标对象提供一个代理对象,并且由代理对象控制对目标对象的引用

目的:

    ①:通过代理对象的方式间接的访问目标对象,防止直接访问目标对象给系统带来不必要的复杂性
    ②:通过代理业务对原有业务进行增强

java当中有三种方式来创建代理对象:

  • 静态代理
  • 基于jdk(接口)的动态代理
  • 基于CGLLIB(父类)的动态代理。

静态代理

创建一个 Image 接口和实现了 Image 接口的实现类。ProxyImage 是一个代理类,屏蔽具体的实现过程并且提供比真实实现过程更多的前后增强操作。

ProxyPatternDemo 类使用 ProxyImage 来获取要加载的 Image 对象,并按照需求进行显示

image.png

public interface Image { 
    void display(); 
}
public class RealImage implements Image { 
    private String fileName; 
    
    public RealImage(String fileName){ 
    this.fileName = fileName; loadFromDisk(fileName); 
    } 
    
    @Override public void display() {
    System.out.println("Displaying " + fileName);
    }
      private void loadFromDisk(String fileName){
    System.out.println("Loading " + fileName);
    } 
 }
 
 
 /**proxy**/
 public class ProxyImage implements Image{ 
 private RealImage factory; 
 private String fileName; 
 
	public proxy(String fileName) {
		// TODO Auto-generated constructor stub
                if(realImage == null){
                 factory = new RealImage(fileName); 
                 } 
		this.fileName = fileName;
	}

 
         @Override public void display() { 
             //before
             System.out.println("image before.... ");
             realImage.display(); 
             System.out.println("image after.... ");
             //after
             
         } 
 
 }
 
 public class ProxyTestDemo { 
     public static void main(String[] args) { 
     Image image = new ProxyImage("test_10mb.jpg"); // 图像将从磁盘加载 image.display();  
     // 图像不需要从磁盘加载 
     image.display(); 
     } 
 }
 
 

细节:我们的真实实现对象必须实现我们的接口,同时代理对象也必须实现这一接口

静态代理存在哪些问题?

静态代理类优缺点:

优点:可以在不修改目标代码的情况下,扩展额外功能

缺点:因为代理类和目标类必须实现相同的接口,所以会有很多代理类,类太多,同时,一旦接口增加方法,目标对象很代理对象都需要维护

违反了开闭原则:程序对访问开放,对修改关闭,换句话来说,当需求发生变化时,我们可以增加新模块来解决新需求,而不是通过改变原来的代码来解决我们的新需求,这里我们的新需求都是通过ProxyImage中添加代码实现的。

假设image是一个定义的播放工具,如同数据库工具定义的规范。现在出了播放图片,又要新增一个播放视频的功能vedioImage,当前ProxyImage里面定义的RealImage是写死的。难道要新增一个vedioImage变量么,类似的在数据库驱动程序中也存在类似现象,javajdk只会定义广义统一的流程接口规范,每个数据库厂商根据该jdk接口自己去实现自家数据库的链接驱动。因此调用驱动时底层实现链接逻辑并不指定具体的实现类型,而是由上层启动类在外部指定,从而动态的加载相应的驱动类,并执行对应的方法流程。

JDK动态代理

动态代理的主要特点就是能够在程序运行时JVM才为目标对象生成代理对象。

常说的动态代理也叫做JDK 代理也是一种接口代理,之所以叫做接口代理,是因为被代理的对象也就是目标对象必须实现至少一个接口,没有实现接口不能使用这种方式生成代理对象,JDK中生成代理对象的代理类就是Proxy,所在包是java.lang.reflect.

import java.lang.annotation.Target;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
 
/**
*动态代理工厂:不具体指定代理对象,代理类也不用实现代理接口,由底层JDK根据代理接口类型自动生成代理对象
 * @author bamboo
 * @description:
 * @date 2020/12/14
 */
public class ProxyFactory implements InvocationHandler {
 
    private  Object target;
    public StarInvocationHandler(Object target) {
        this.target = target;
    }
 
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
 
        System.out.println("展示前工作");
        //调用目标对象的目标方法
        method.invoke(target,args);
        System.out.println("展示后工作");
        return null;
    }
    
    //代理对象初始化:利用反射创建代理对象
    public Object getProxyInstance() {
		// TODO Auto-generated method stub
		return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
	}
}



public class JdkTest {
	public static void main(String[] args) {
                //由调用层决定具体由谁来执行
                RealImage realImage = new RealImage();//1
		Image image =(Image) new ProxyFactory(realImage).getProxyInstance();
		image.display("d://image.jpg");
	}
}

JDK代理方式不需要代理对象实现接口,但是实现对象一定要实现接口,但是我们在项目中有很多需要代理的类并没有实现接口,所以这也算是这种代理方式的一种缺陷

优点:代理类和实现类脱离了依赖关联,不用强绑定,完全由调用方使用时动态反射出具体的实现类
缺点:代理的对象必须有实现类并且重写了该接口,否则无法实现代理。

比如,我们在JdkTest中//1行并不知道具体实现类,更确切说压根就没有实现类,那么通用驱动就不用写了吗?

cglib动态代理

如果我们 需要给没有是实现任何接口的目标类生成代理对象,JDK方式是做不到的。这是就可以使用继承目标类以目标对象子类的方式实现代理,这种方法就叫做Cglib代理,也叫做子类代理,他是在内存中构建一个子类对象从而 实现对目标对象功能的扩展。

Cglib是一个强大的高性能代码生成包,他可以在运行期扩展java类和扩展java接口。它广泛的被许多AOP框架使用,例如Sring AOP和synaop,为他们提供方法的intercepion(拦截)

Cglib包的底层是通过使用一个小而快的字节码处理框架ASM来转换字节码并生成新的类。

Cglib子类代理实现方法:

1.需要引入cglib的jar文件 cglib-2.2.2.jar asm-3.3.1.jar,但是Spring的核心包中已经包括了Cglib功能,所以直接引入spring-core-3.2.5.jar即可.
2.引入功能包后,就可以在内存中动态构建子类
3.代理的类不能为final,否则报错
4.目标对象的方法如果为final/static,那么就不会被拦截,即不会执行目标对象额外的业务方法.

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;



import java.lang.reflect.Method;

/**
*cglib代理:不需要实现类,只需要提供普通类,剩下的工作有底层完成
* @author bamboo
* @description:
* @date 2020/12/14
*/
public class CglibProxyFactory implements MethodInterceptor {

   //维护目标对象
   private Object target;

   public CglibProxyFactory(Object target) {
       this.target = target;
   }

   /**
    * @Description:获得目标类的代理对象
   */
   public Object getProxyObject(){
       //1、工具类
       Enhancer enhancer = new Enhancer();
       //2、设置父类
       enhancer.setSuperclass(target.getClass());
       //3、设置回调
       enhancer.setCallback(this);
       //4、创建代理类
       Object proxyObject = enhancer.create();
       return proxyObject;

   }

   @Override
   public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {

       System.out.println("工作前");
       //执行目标对象的目标方法
       method.invoke(target,objects);
       System.out.println("工作后");
       return null;
   }

}

//普通类
class Image {
   void display() {
       System.out.println("display");
   }
}



public class CglibTest {

   public static void main(String[] args) {
       Image image = new Image();
       Image proxyObject = (Image)new CglibProxyFactory(image).getProxyObject();
       proxyObject.sing();
   }
}

总结:其实cglib可jdk的动态代理很类似,最终都是通过被代理类执行原始方法,只是jdk使用的是反射,cglib使用的fastcalss机制

到这三种代理方式我们都介绍完了,下面总结一下:

1、如果目标对象实现了接口,我们就采用JDK方式实现动态代理

2、如果目标对象没有实现接口,我们就需要采用cglib方式实现动态代理;

扩展在实际项目中使用样例:接口+注解的动态代理

mybatis中Map接口定义了方法,不用具体实现接口和xml的sql语句映射,代理类自动完成这些工作。
springCloud中对于feign调用微服务时只依赖了服务方提供的interface方法包,调用方这边并没有imp相关的接口实现类,这个过程也是由代理类完成,从而实现http访问服务方的接口返回结果给调用方

这里以微服务client端为例


/**
 * @author bamboo
 * @description: 接口类
 * @date 2020/12/14
 */
public @interface UserService {

    String  getById(Integer id) ;
}



/**
 * @author bamboo
 * @description: 接口方法执行拦截器:执行接口方法时做增强,使用http调用远程服务并返回值
 * @date 2020/12/14
 *
public class CustomerInvocationHandler implements InvocationHandler {
    //被代理类
    private final Class<?> serviceClass;

    public CustomerInvocationHandler(Class<?> serviceClass) {
        this.serviceClass = serviceClass;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("proxy = " + serviceClass.getName() + ", method = " + method.getName() + ", args = " + Arrays.deepToString(args));
        Socket socket = new Socket("127.0.0.1", 8889);
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
        //数据打包
        RpcRequest rpcRequest = new RpcRequest(serviceClass.getName(), method.getName(), method.getParameterTypes(), args);
        //通过socket发送数据
        objectOutputStream.writeObject(rpcRequest);
        //接收返回数据
        ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream());
        return inputStream.readObject();
    }
}




import java.lang.reflect.Proxy;
 
/**
 * @author bamboo
 * @description: 代理工厂
 * @date 2020/12/1411:47
 */
public class  ProxyFactory {
    public static Object getProxyObject( ClassLoader target,
                                         Class<?>[] interfaces,
                                         InvocationHandler h){
        return Proxy.newProxyInstance(target,interfaces,h);
    }
}

通过RPC远程调用

  • 创建代理类的InvocationHandler,相当于AOP拦截器,使得调用代理类的方法都会转入invoke中执行。
  • 创建代理类(调用方法已经在invoke中完成)。
  • 调用相应的方法。
public class TestRpc {

    public static void main(String[] args) {
        //创建代理类的InvocationHandler拦截器
        CustomerInvocationHandler customerInvocationHandler=new CustomerInvocationHandler(UserService.class);
        //创建代理类
        //代理类会声明被代理类的接口
        UserService userService=(UserService) ProxyFactory.getProxyObject(UserService.class.getClassLoader(),new Class<?>[]{UserService.class},customerInvocationHandler);
        //调用
        String a=userService.getById(1);
        System.out.println("RPC CONNECTED!"+a);
    }
}



-------------------------------------------------------------------------------------
proxy = com.bamboo.demo.rpc.UserService, method = getById, args = [1]
RPC CONNECTED!bamboo

以上过程可以看出代理在我们常用场景中的重要性,不过这种使用也屏蔽了底层具体实现的细节,比如我们使用Mybatis如果不去看源码不关注底层其实直接一个接口就可以完成工作。同样的微服务中,我们只是使用其实只用给调用方一个接口它直接拿着用就可以了,连TestRpc注释调用之前的代码都不需要关注,是我们更加关注业务本身,从而抽繁化简,这才是编程工具使用称心的本心和初衷。

Cursor免费额度用完?切换Gemini+OpenRelay免费通道实操指南 AI编程助手的‘免费额度’本质是服务端对用户调用频次或Token消耗的配额管理机制,其底层依赖模型路由网关实现多源模型接入。OpenRelay作为兼容OpenAI协议的智能代理层,通过请求头识别与模型白名单机制,为Gemini系列模型提供独立于厂商账户体系的每日免费调用通道。该方案不涉及API密钥盗用或协议绕过,而是利用官方测试资源池实现合法、低延迟、高准确率的中文代码理解与生成。适用于Spring Boot、Java生态等典型工程场景,尤其在函数解释、错误诊断和注释生成等任务中展现优于GPT-4o-min 阅读详情

相关推荐

PD虚拟机安装CentOS7后必做的Parallels Tools配置指南(附常见错误解决)

本文详细指导在Mac的Parallels Desktop虚拟机中安装CentOS 7后如何高效配置Parallels Tools,包括环境准备、镜像挂载、依赖问题解决及性能优化。特别针对常见错误如挂载失败、依赖缺失等提供实用解决方案,帮助用户实现主机与虚拟机间的无缝交互和显示优化。

weixin_29288313的博客 299

解决java 无法使用,全局proxifier 代理工具

解决配置: 通过环境变量配置: export _JAVA_OPTIONS="-Djava.net.preferIPv4Stack=true" ...

极客编程的专栏 2193

从零开始:使用Mask2Former训练你的专属图像分割数据集

本文详细介绍了如何使用Mask2Former训练自定义图像分割数据集,从环境配置、数据集准备到模型训练与优化。通过实战技巧和问题排查指南,帮助开发者高效完成从零开始的图像分割任务,特别适合需要处理自定义数据集的AI研究人员和工程师。

weixin_30566063的博客 636

imageproxy图片代理服务

imageproxy是一个用go编写的缓存图片代理服务器。其特点:基本图像调整,例如调整大小、裁剪和旋转使用允许的主机列表或请求签名 (HMAC-SHA256) 进行访问控制支持 jpeg、png、webp(仅解码)、tiff 和 gif 图像格式(包括动画 gif)在内存中、磁盘上或使用 Amazon S3、Google Cloud Storage、Azure Storage 或 Redis 进行缓存易于部署,因为它是纯粹的。

nishuihan_liang的博客 2217

B-Tree数据存储

SQLITE数据存储1. B-Tree的优势  在SQLite中数据库、表、索引都是通过B-Tree和B+Tree的形式进行存储的。如果采用传统的二叉树查找树、红黑树的查找深度一般为log2(N) \log{_2}(N)(其中N表示的是整个树的关键字的数目),在数据库中如果存储的资源过多,就会导致查找一个数据过程中出现较多的磁盘I/O操作,而过多的磁盘操作就会导致整个查找的效率较低,而基于二叉树的一

Promiscuous_youth的博客 1141

1 四种防反接电路——multisim仿真

摘要:防反接电路可防止电源反接损坏器件,主要有四种方案:1)二极管串联(低成本,适用小电流);2)整流桥(无极性输入,但效率低);3)保险丝+稳压管(低损耗但需更换);4)MOS管方案(大电流、高效率,主流选择)。选型需考虑电流、压降和成本,MOS管因其低导通电阻(毫欧级)成为大电流应用的首选。口诀:"小电流二极管,大电流用MOS"可快速指导设计。

XU157303764的博客 1565

【资源集合】 ES6 元编程(Proxy & Reflect & Symbol)

导读 几年前 ES6 刚出来的时候接触过 元编程(Metaprogramming)的概念,不过当时还没有深究。今天在应用和学习中不断接触到这概念,比如 mobx 5 中就用到了 Proxy 重写了 Observable 对象,觉得有必要梳理总结一下。 本文不生产代码,只当代码、文档的搬运工。所以本文并非是一篇传统意义上的教程,更类似于 g...

weixin_34112900的博客 249

利用pytorch长短期记忆网络LSTM实现股票预测分析

长短时记忆网络(Long Short Term Memory Network, LSTM),是一种改进之后的循环神经网络,可以解决RNN无法处理长距离的依赖的问题,目前比较流行。LSTM主要就是加入了三个门控:第一个开关遗忘门:负责控制继续保存长期状态c;第二个开关输入门:负责控制把即时状态输入到长期状态c;第三个开关输出门:负责控制是否把长期状态c作为当前的LSTM的输出。

优快云 精品推荐 1万+

Proxy代理实现对象关键属性无法更改

Proxy代理实现对象关键属性无法更改     由于js的语言特性对象可以动态增加和修改属性和方法,但代码很多时可能会不小心覆盖前面对象的一些关键属性和方法,导致结果异常,且不方便查找出错的地方。利用es6的proxy可以简单实现对象某些关键属性的私有化,不改变其他属性方法的覆盖与扩展。 function signal(obj, arr) { return new Proxy(obj, { set(target,

evail_的博客 1116

爬取Unsplash高清壁纸:Python爬虫实战教程(最新技术)

在当今数字化时代,高清壁纸已经成为人们个性化设备的重要元素。Unsplash作为全球最知名的免费高质量图片网站,汇集了数百万张由全球摄影师贡献的高清图片。然而,Unsplash官网的下载方式需要手动操作,对于需要批量下载壁纸的用户来说效率较低。本文将带你深入探索如何使用Python爬虫技术高效爬取Unsplash高清壁纸,从基础到进阶,全面掌握图片爬取的核心技术。Unsplash成立于2013年,是一个完全免费的图片分享平台。高质量内容:所有图片均由专业摄影师上传,分辨率普遍达到4K以上免费商用。

2201_76125261的博客 935

基于STFT和卷积神经网络的时序数据分类

我们提供了相应的代码和数据,读者可以直接运行并尝试在自己的数据集上进行分类实验。在本文中,我们将介绍一种基于短时傅里叶变换(STFT)和卷积神经网络(CNN)的时序数据分类方法。我们将提供可直接运行的代码和数据,以帮助读者理解和实现这一方法。STFT可以提取信号的频谱信息,有助于捕捉时序数据中的关键特征。在这个例子中,我们将使用一个简化的手势识别数据集作为示例。在这段代码中,我们使用Adam优化器和稀疏分类交叉熵损失函数进行模型的编译。然后,我们使用训练集进行模型的训练,同时使用测试集进行模型性能的验证。

CodeWOW的博客 692

js Proxy对象修改值

我用的是vue3 uploadList.value取得是上述Proxy对象的值(target)Proxy对象可以直接修改值。

· 1661

【推荐系统】推荐算法:冷启动-召回-粗排-精排-重排 解读

【推荐系统】推荐算法:冷启动-召回-粗排-精排-重排 解读

Danger的博客 3760

深入解析Android Binder Java层调用流程:从AIDL到内核驱动的完整通信链路

进程间通信(IPC)是操作系统实现多进程协作的核心机制,它允许不同进程安全、高效地交换数据和调用服务。在Android系统中,Binder机制是实现IPC的基石,其设计通过一次内存拷贝和线程池模型,在保证安全性的同时提供了高性能的跨进程通信能力。从技术价值看,Binder不仅支撑了Android四大组件、系统服务等框架层的交互,更是应用性能优化和复杂问题排查的关键。在实际应用场景中,开发者通常通过AIDL(Android接口定义语言)定义接口,其生成的Stub和Proxy类封装了Binder通信的复杂性,使

weixin_34055787的博客 370

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

分布式服务框架(拾遗)

为什么80%的码农都做不了架构师?>>> ...

weixin_33896069的博客 183

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java 代理模式的基本概念、使用场景、应用示例和实现方法

代理模式是一种结构型设计模式,它允许我们通过添加一个代理对象来控制对另一个对象的访问。代理对象和实际对象具有相同的接口,使得客户端在不知情的情况下可以使用代理对象进行操作。代理对象在与客户端进行交互时,可以控制对实际对象的访问,以实现一些额外的功能,例如访问计数、延迟加载、权限控制等。在 Java 中,代理模式主要有两种实现方式:静态代理和动态代理。静态代理需要手动编写代理类,通常需要针对每个实际对象编写一个代理类,在系统中管理多个代理类比较麻烦。

网络技术联盟站 3687

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java设计模式---代理模式详解

代理模式超级详解

zhenghuishengq的博客 2197

JAVA实现PRC基本调用

什么是PRC PRC是一种远程过程调用协议,可以像调用本地服务一样调用远程的服务,是一种采用客户端/服务器的模式。常见的PRC框架也有很多比如最常用的dubbo等。 RPC能够让本地应用简单、高效地调用远程服务器中的服务。它主要应用在分布式系统、微服务。 代码实例 技术点:Java socket、动态代理、Java对象操作流、反射 接口以及接口实现 /** * Crea...

天高任鸟飞 2249

Java动态代理的常用场景及示例

Java的动态代理在很多场景中都有广泛的应用。以下是几个常见的使用场景及相应的案例:**more。

maxiaoteng的博客 1469

java prc 协议_Java RPC协议设计

调用流程motan的协议设计包括 request 级别的 header 和 body,request 的 body 中又包含了 header 和 body; 其中 requestId, request/response 的标记是冗余的dubbo的协议设计Server参数的优化bootstrap.option(ChannelOption.SO_BACKLOG, 128); // 3次握手连接队列bo...

weixin_36302331的博客 274

文艺复兴:一文打造Android热修复专家

近几年一方面随着热修复框架本身已发展相对成熟,另一方面对于业务动态更新的诉求大家致力于通过RN、Flutter等动态化框架解决,热修复这个话题似乎已经没什么热度了。写这篇文章也是恰好由于我之前从事过一段热修复相关的工作,觉得这个话题相关的技术体系和问题还是非常有趣的。我们可能都知道通过PathClassLoader的类替换方案可以实现class的热修复,但可能不了解替换之后由于dex2oat的编译导致的一系列不生效或异常崩溃问题。

chuyouyinghe的专栏 459

【Java】代理模式(Proxy模式)详解

Java代理模式详解

Passer_hua的博客 2万+

使用Java实现简单的RPC框架

proto是当今使用最广泛的IDL,本例中客户端在调用服务器的方法的时候,用proto文件确定两者的方法名、参数、返回值等。下面我们编写hello.proto文件// 版本声明,使用Protocol Buffers v3版本package pb;// 包名// 定义服务// SayHello 方法// 请求消息// 响应消息通过.proto文件,使用gRPC提供的工具生成我们需要的库代码,然后用Go编写客户端和服务端程序。

weixin_46388088的博客 1637

Java的动态代理Proxy

Java的动态代理Proxy。动态代理。JDK动态代理。Object proxyObj = Proxy.newProxyInstance( obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), new ProxyInvocationHandler(obj));

小虎哥的技术博客 1739

Java中服务器代理(Proxy)详解

服务器代理是一种网络服务组件,它充当客户端与目标服务器之间的中介,负责接收、处理并转发网络请求。本文全面探讨了代理的概念、分类与实现,并通过Spring Boot展示了如何应对实际问题如CORS限制。同时,还提供了多个代码实例和实用的应用场景,包括正向代理、反向代理和透明代理的实现方法。通过这些技术手段,开发者可以高效构建灵活的网络服务,提高系统的性能与安全性,并解决诸如跨域限制等复杂问题。

2301_79858914的博客 4203

java基础之proxy

java基础之动态代理 什么是动态代理 动态代理作用 动态代理demo 什么是动态代理? 动态代理(以下称代理),在运行时创建一个实现某些给定接口或者类的新类(也称“动态代理类”)及其实例(对象) 动态代理的实现有两种 1、使用java proxy类,只能代理inteface 2、使用CGLIB框架在运行时...

nongfuyumin的专栏 383
上一篇: K8S容器实例POD中安装curl-vim-tennet工具
下一篇: ThreadLocal父子线程数据传递
牧竹子
博客等级 码龄17年 572粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值