java代理的缘由及java动态代理

一、java代理出现的原因

 1.代理在java中是什么? java号称万物皆对象,而实例对象的类 本身涵盖两个类型(类中嵌套类先不作分析),一是成员属性(表示这个对象是什么,拥有什么),而是成员方法(表示这个对象的动作,做什么)。

所以,“代理”主要就是在动作这一块增加的处理。而动作怎么增加处理呢,如果是在该方法内部去改变,那么就是这个方法的本身动作得到了改变,动作原有想表达的含义就改变了,这形成破坏且不合理。

那基于此,需要在此方法之前处理或者之后处理。而java本身的方法有个特性,就是栈式调用

  这个栈式调用是什么意思呢,java的逻辑处理都是在方法内部进行的。而所有的入口都是一个方法,main(){}。而方法的调用都是一直向里层叠的。比如 main(){  a.a(); b.b();} ,会先执行完a的a方法,才会去执行b的

b方法,最后main方法执行完,因为线程执行本身也是出入线程栈的概念。栈的出入顺序也就是先入后出,后入先出。

  接第一段,代理的目的是需要对一对象的某动作去增强且不会改变内部逻辑,那么以main(){  a.a(); b.b();} 这种方法,在b方法之前调用a方法,也可以说是能够对b动作的一种增强。然而如果需要对b的b方法每一次

都要“增强”,那么执行之前都需要加一段a方法。会产生冗余重复。

      如果是换种方式呢。main(){  a.a( ){b.b();};}  在a的a方法内部去先实现a方法的逻辑,尾部再调用b方法,那么也是一种增强方式。如此便是静态代理。在a所在类内部注入一个b对象的引用,那么每次a的a方法被调用

都可以继续调用b方法,而在外部不需要再次对b方法去调用,那么就是说,b的b方法都被a的a方法去代理了。

  如果a中还有a1,a2,a3.需要去代理,那么如果根据上面的静态代理,我需要重新写个b1,b2,b3 然后跟a方法一样包裹。那在某些场景不优雅且不便利。那么怎么解决呢,需要模糊方法调用,就是我可以在a的a

方法内部去调用所有的方法,而只需要知道我本身要调用b的哪个方法。

   

转载于:https://www.cnblogs.com/xxfs/p/10984446.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值