Fork me on GitHub

静态代理

  • 静态代理,代理类是在程序运行之前就定义好的

    1. 定义业务接口,简单的转账业务

      1
      2
      3
      4
      5
      6
      7
      public interface IAccountService {

      //主业务逻辑,转账

      void transfer();

      }
  1. 定义目标类,该类实现业务接口,并实现接口定义的目标方法(只实现主业务逻辑转账)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class AccountServiceImpl implements IAccountService {

    //目标方法

    @Override

    public void transfer() {

    System.out.println("完成转账功能");

    }

    }
  1. 定义代理类,该类实现业务接口。并且将接口对象作为一个成员变量,还要定义一个带参数(接口对象)的构造器,因为要将目标对象引入代理类,以便代理类调用目标类的目标方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public class AccountProxy implements IAccountService {
    //声明业务接口对象
    private IAccountService target;

    public AccountProxy() {
    }
    // 业务接口对象作为构造器参数
    public AccountProxy(IAccountService target) {
    this.target = target;
    }

    /**
    * 代理方法,实现对目标方法的功能增强
    */
    @Override
    public void transfer() {
    //对目标方法的增强
    System.out.println("对转账人身份进行了验证!!");
    target.transfer();
    }
    }
  2. 定义客户类实现使用代理类转账。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    1. public class Client {
    public static void main(String[] args) {
    //创建目标对象
    IAccountService target = new AccountServiceImpl();
    //创建代理对象
    IAccountService proxy = new AccountProxy(target);
    //执行增强过的业务
    proxy.transfer();
    }
    }
-------------本文结束感谢您的阅读-------------