Spring-静态代理

一.静态代理

    由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类  的关系在运行前就确定了。

1.满足的条件和他的弊端

  1、需要知道核心类(被代理类)是哪一个类,并且有什么方法。 

  2、非核心的代码需要重复写多次,显得代码的结构臃肿,形成代码冗余。

  3、非核心类(代理类)需要实现核心类(被代理类)实现的接口,也就是他们需要实现共同的接口,但是以核心类实现的接口(被代理类)为准。

先声明一个主题接口

复制代码
package SubjectText01;


public interface Subject {
    public void request();
}
复制代码

在实现类中要重写这个方法

  public class RealSubject implements Subject {
    public void request() {
      System.out.println("真实的主题对象");
    }
  }
复制代码
 public class ProxySubject implements Subject { 
  private RealSubject realSubject;
  public RealSubject getRealSubject() {
  return realSubject;
}
public void setRealSubject(RealSubject realSubject) {
  this.realSubject = realSubject;
}
 public void request() {
  System.out.println("Before====");
  realSubject.request();
  System.out.println("After====");
 }
}
复制代码

在测试类中

复制代码
  @Test public void t2(){ 
  //创建一个真实的主题对象
  RealSubject realSubject=new RealSubject();
  //创建一个代理主题对象
  ProxySubject proxy=new ProxySubject();
  //将真实对象赋值给代理对象
  proxy.setRealSubject(realSubject);
  proxy.request();
  }
原文地址:https://www.cnblogs.com/buai/p/8526813.html