java动态代理源码阅读

1.什么是代理和动态代理

代理的主要是为了不改动被代理对象的代码基础上给予其更多的功能,常用的代理实现通过被代理对象,代理类同时继承同一个类,或者同时实现同一个接口,这种有编程开发者自己编写的代理类是实现的方法为静态代理;同时在系统开发中,可能由于需要实现的代理类很多,或者在程序开发时我们无法确定程序运行时具体的代理类功能,这种情况下就不能使用静态代理的方法,需要使用动态代理。另一方动态的代理的实现可以有两种方法,一种是使用java中的动态代理,还有就是使用cglib来实现动态代理,本文中主要介绍学习java动态代理的实现以及源码的解析。

java动态代理的原理是基于java反射来实现的。

2.java动态代理的主要步骤

  其实对于java实现动态代理的步骤而言是非常固定的,主要可以分成以下几个步骤:

  • 1.创建一个被代理对象和代理对象共同实现的接口,以及被代理对象的类;
  • 2.创建一个实现InvocationHandler接口的代理对象具体实现类,并实现其中的invoke()方法;
  • 3.使用Proxy类中的newProxyInstance方法,传入被代理对象的classloader和被代理对象的interface,以及实现代理类功能的增强类的对象,获得对应的动态代理对象,用其和被代理对象的接口的引用来指向具体的动态代理对象;
  • 4.通过接口的引用来调用对应的方法,实现动态代理对象中真正的方法。

3.原理图

proxy

4.代码解析

  主要看看一下具体实现代理类功能的handler接口实现类LianJiaHandler.class 和 主类中通过Proxy类获取并使用该动态代理类的使用过程。

4.1 LianJiaHandler.class

1
2
3
4
5
6
7
8
9
10
public class LianJiaHandler implements InvocationHandler{



/*具体实现动态代理类对象方法的功能 */
@Overried
public Object invoke(){

}
}

4.2 Proxy.class