spring笔记3:静态/动态代理

注:本文内容都来自互联网,通过自己整理用于学习,不作任何其他作用!

代理是什么?

把多个对象的业务,抽取集中到一个代理对象,实现了功能,简化了操作。

静态代理是什么?

代理模式最主要的就是有一个公共接口,一个实体类,一个代理类proxy
1
代理类可以通过和实体类共同实现一个接口来实现相同的功能
2
在代理类中假如实体类对象建立两者的联系
3
在代理类中调用实体类对象的公用接口方法。
以此来实现代理模式间接的调用实体类的方法。
好处:
可以在代理类中实现原有公共功能,同时实现了新功能的拓展。

动态代理是什么?
基于接口的动态代理

代理类由程序运行期间动态创建。
——
Proxy.newInstance(ClassLoader,Class接口字节码数组,InvocationHandler):创建代理实例对象。
——
ClassLoader参数:被代理对象的加载器,固定的。
——
Class<?>[] interface:字节码数组,共有接口。(让代理/被代理对象有相同的方法)
——
InvocationHandler:用于增强的代码,通常是写一个ih实现类,一般是匿名内部类。
——
增强的代码:新增的业务逻辑。写在invoke方法中,被代理对象放接口方法的前/后。
——
InvocationHandler中invoke(Proxy,Mehtod,Args):被代理对象的方法都会经过Invoke.
return:和被代理对象有相同的返回值
——
Proxy:代理对象,一般不用
Method:当前执行的方法
Args:方法参数
——
Method.invoke(object,args):
object:被代理对象
args:参数
——
InvocationHandler类:通过这个类把被代理对象的功能拿出来,同时可以被Proxy使用来创建一个代理对象。类似一个中间件,动态管理的中间件。
——
Proxy类:用来创建动态代理对象的类。

基于子类的动态代理

使用:
Enhance类的create方法
——
被代理的类不能是最终类
——
create方法的参数(Class,Callback)
Class:被代理对象的字节码
Callback:用于提供增强代码,和invoke类似。
通常使用接口的子接口实现类new MethodIntercept(proxy,method,args,methodProxy)参数和Invoke类似

——
1.导入cglib依赖
——
2.在consumer类中,Producer p = (Producer)Enhance.create(produce.getClass(),new MethodInterceptor).
——
3.在MethodInterceptor中写入增强代码
4.用Producer代理p调用公有方法。

tip:在idea中右键Diagrams->Show Diagrams可以查看当前类的继承关系
选中接口,点击shou implements查看实现类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值