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

Posted xxfs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的哪个方法。

   

以上是关于java代理的缘由及java动态代理的主要内容,如果未能解决你的问题,请参考以下文章

[转]JAVA的动态代理机制及Spring的实现方式

Java动态代理实现及实际应用

轻松学,Java 中的代理模式及动态代理

轻松学Java 中的代理模式及动态代理

java有关静态代理及动态代理的实现

java动态代理原理及解析