静态代理、jdk动态代理、cglib动态代理

我们先用房东出租房子引出代理模式
出租一套房子流程为:
发布出租消息->带人看房->准备合同->签合同->收钱交钥匙
如果租房出新规,需要提前备案,那就变成了以下的流程:
备案->发布出租消息->带人看房->准备合同->签合同->收钱交钥匙

每一次的变动房东都需要了解最新的规定,但是房东不想这么麻烦,那就把自己不内行的事给专业的中介做,需要签合同的时候过去下就好了,这样房东就不要关注出租的细节了,只要专注签合同就可以了,无论租房流程怎么变,和房东没关系了。

这里房东是真实对象,中介就是代理

代理模式的好处有以下几个
1.独立业务与公共业务拆开
2.公共业务扩展集中管理

1.传统代码

缺点:一旦有调整,原始业务类就要全部做修改,风险太大

2.静态代理

静态代理的规范是:真实类和代理类继承相同接口

优点:独立业务和公共业务拆封了,如果公共业务有变化,不会修改独立业务,独立业务更专注

缺点:一个独立业务类就要有一个代理类,虽然业务清晰了,但是代码量上升了

3.动态代理

静态代理的缺点是每个类都是继承同一接口,每出现一个新的接口就要实现一个新的代理类,怎么样才能不用每次生成一个代理类,那就涉及到动态代理

动态代理分为两种模式

1.jdk代理模式:拿到类结构,复制出和原对象一样的结构,调用代理的方法时,利用反射,调用真实对象的方法。

2.cglib代理:拿到类的字节码,直接改变字节码来增强原来的方法,然后生成一个子类

3.1 jdk动态代理:

但是你会发现上面的动态代理其实还是只能处理指定类,随便换一个就不能用了

​​​​​​​

所以需要使用Object类型

3.2 cglib代理

4.总结

jdk和cglib动态代理两种模式怎么可以直观的看呢

这里可以看出jdk模式下产生代理对象就是一个代理

而cgi模式下还是一个原类型,只是做了增强。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值