Java动态代理笔记

最近在看 Spring4.3 官方文档,刚看到使用BeanFactoryPostProcessor接口实现容器功能扩展,利用这个接口可以修改Bean属性值,实现动态代理等。很多框架都是通过此接口来实现对Spring的扩展,如Mybatis与Spring集成时,只定义了Mapper接口,无实现类,Spring却可以完成自动注入。在这里看到动态代理,就复习下动态代理。

代理模式

代理模式基本上有subject,realSubject,proxy三个角色,其中 subject 是接口,realSubject 和 proxy 都实现此接口。realSubject 是实现完成真正业务的方法,proxy 在自身 request 请求中调用 realSubject 的方法。

代理分为静态代理和动态代理。静态代理在系统中写好代理类,执行代理操作。这样导致系统结构比较臃肿松散,为了解决这个问题产生了动态代理,动态代理对象用完就销毁。

JVM是通过字节码的二进制信息加载类的,那么,如果在运行期系统中,遵循.class文件组织结构生成相应二进制数据,然后再把这个二进制数据加载转换成对应的类,这样就完成了在代码中动态创建一个类的能力。动态代理即是采用了JVM这个原理。

关于动态代理

  1. 出发点,为了在不入侵源码的情况下在原先方法基础上添加另外的业务逻辑
  2. 动态代理的基本模式是代理对象将自己方法功能的实现交给 InvocationHandler 处理,外界对 proxy 每个方法的调用都通过 InvocationHandler invoke 方法来处理
  3. 动态代理步骤:新建 realSubject 对象,获取 realSubject 对象所有接口,创建 InvocationHandler 实现类,由接口和 handler 创建代理对象。
  4. JDK生成的代理类继承JDK的Proxy类,实现了 realSubject 的所有接口,代理类中的所有方法都是 final 方法,所有代理类的方法都统一调用 InvocationHandler 的 invoke() 方法。

参考文章:https://www.cnblogs.com/rinack/p/7742682.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值