动态代理原理

动态代理的原理分析:


需求:在一个类方法执行的前后进行预处理,比如日志
处理方式:

1.继承这个类,重 写里面的方法,在重写的过程
中使用:
before();
super.method();
after();

2.实现跟被处理类一样的接口,其后业务处理方式跟1中
一样,不过这种方式使用起来更加的灵活,重用性更强,
所以使用这种方法

---------------------------------------------

上述2的做法实现了对一个类处理的功能,如果有很多类都
需要你提供相同的处理的话,那么如果使用上面的方式就
会产生很多一样的代码,非常的冗余

为了不再让程序产生那么多的冗余的代码,冗余的类,那么
需要动态的生成代理类,这种动态的好处在于我什么时候需要,
就什么时候生成,因此就需要实现这一的流程:
生成动态代理的.java文件->编译成为.class文件->被load
进入内存,生成新的对象->把.class文件删除掉->把生成的
对象返回出去.

错误分析:这个程序Proxy里面用到了编译的工具,这个在默认的
运行程序的jre里面是没有的,必须要使用jdk中的jre才行,因此
如果程序编译不成功的话,很可能是这方面的原因

为什么需要先把字符串给写到文件里面之后再再次的load进入内存?
这是因为classLoader它只能够加载二进制的文件,所以需要先把
程序编译为二进制的.class文件之后才可以被load进入内存进而
产生对象,而只有先把字符串写入.java文件之后才会被程序编译的

动态代理的原理:

1.要有动作接口,动作实现类
2.要有处理接口,处理实现类
3.动态代理类,生成动态代理对象

调用过程:
生成动作对象
->处理对象包含动作对象引用->生成动态代理类->动态代理类调用动作接口的方法(实际上就是调用的处理对象的invoke方法)
生成处理对象

InvocationHandler的实现类中拥有对真正需要处理类的引用,负责
对类方法的调用,处理逻辑添加

动态代理类:拥有InvocationHandler的实现类的引用,负责对InvocationHandler
方法处理的管理.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值