码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-06-06 14:20:54      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:概念   目的   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的哪个方法。

   

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

标签:概念   目的   java动态代理   顺序   含义   涵盖   场景   重复   增强   

原文地址:https://www.cnblogs.com/xxfs/p/10984446.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!