Bootstrap

Java动态代理的理解

动态代理怎么理解

要理解动态代理,就要先理解什么是“动态”,什么是“代理”。

动态

一般情况下如果想实现接口,就直接在代码里面创建一个该接口的实现类即可,然后代码直接运行起来就可以了。这种情况下,在代码运行前接口的实现类就已经通过硬编码的方式编写好了。

之所以称为“动态”,是因为接口的实现类并不是事先编写好的,而是在代码运行时生成的。这样的类就叫动态类,而由动态类创建的实例,就叫作动态实例。

代理

我们往往不会凭空生成动态类,这么做没有意义。通常是为了指定的目标对象创建代理才会这么做,所以才叫动态代理。

什么时候使用动态代理

常规的代理模式如下:

public interface Image {
   void display();
}

public class RealImage implements Image {

	@Override
	public void display() {
	   System.out.println("Displaying image");
	}public class ProxyImage implements Image {
 
   private Image realImage;
 
   public ProxyImage(Image realImage){
      this.realImage = realImage;
   }
 
   @Override
   public void display() {
      System.out.println("loading...");
      realImage.display();
      System.out.println("this image is beautiful.");
   }
}

要想实现这样的代理模式有一个前提条件,那就是你能访问得了接口(即上例中的接口Image)。但是有时候接口是访问不到的,如第三方库(jar、aar)中的类的内部私有接口。这时候想要按照常规的方式创建代理类是不可能的。这时就可以使用动态代理类。

动态代理类的创建和使用,网络上有很多这里就不多说明了。本文意在阐述“对动态代理的理解”和“要什么时候才使用动态代理”。

;