动态生成类_动态代理是基于什么原理?

代理模式

给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问。

什么是动态代理

运行时动态生成代理类。

动态代理我们需要些什么

1.业务接口(Interface)

业务的抽象表示。

2.业务具体实现类(concreteManager)

实现业务接口,执行具体的业务操作。

3.业务代理类($proxy,在运行的时候动态生成的类)

进行业务代理,调用业务代理操作类。

4.业务代理操作类(proxyHandler,实现了InvocationHandler接口的类)

代理方法的直接调用者,通过InvocationHandler中的invoke方法直接发起代理。

5.客户端调用对象(client)

发起业务。

d57dd09f8f604ea3157ec8eabed36c31.png

Java动态代理、cglib动态代理

按照代理的创建时期,代理类可以分为两种:

静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。

动态代理:在程序运行时,运用反射机制动态创建而成。

动态代理是基于什么原理?

动态代理是基于反射机制,在程序运行时,动态构建代理、动态处理代理方法调用的机制。很多场景都是利用类似机制做到的,比如用来包装RPC调用、面向切面的编程(AOP)。

实现动态代理的方式很多,比如JDK 自身提供的动态代理,就是主要利用了上面提到的反射机制。还有其他的实现方式,比如利用更高性能的字节码操作机制,CGLIB(基于ASM)。

代理机制

首先,动态代理是一个代理机制。

代理可以看作是对调用目标的一个包装,这样,我们对目标代码的调用不是直接发生的,而是通过代理完成的。

通过代理可以让调用者与实现者之间解耦。比如进行RPC 调用,框架内部的寻址、序列化、反序列化等,对于调用者往往是没有太大意义的,通过代理,可以提供更加友好的界面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值