JAVA-静态代理和动态代理

静态代理:在代码中显示地实现一个业务实现类的指定代理,在代理类中对同名的业务方法进行包装,用户通过代理类调用被包装过的业务方法
缺点:一个代理类只能对一个业务接口的实现类进行包装,如果有多个业务接口的话就要定义很多类和代理类

动态代理:在运行期间根据需要动态地创建代理对象

jdk动态代理原理:是针对接口来实现代理的,被代理类必须是实现有接口的,每个动态代理类都要实现InvocationHandler这个接口,每个代理类的实例都关联到一个Handler,当我们通过代理对象调用一个方法的时候,这个方法的调用就会被转为由InvocationHandler的invoke方法来执行,创建一个代理类时需要使用业务类实现的接口作为参数。
两个重要的类或接口:InvoactionHandler(接口)、Proxy(类)
缺点:动态代理的类必须至少实现一个接口,底层利用反射机制,效率不是很高

cglib动态代理机制:cglib是针对类来实现代理的,原理是对指定的业务类生成一个子类,并覆盖业务方法实现代理,采用继承的方式,所以不能对final修改的类进行代理
优点:不受代理类必须实现接口的限制,底层使用ASM字节码技术实现代理类,理论上比反射效率要高(实测好像并非如此,需要验证,可能与jdk版本有关系)
缺点:不能代理用final修饰的类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值