代理模式

代理模式(重点)

  1. 学习代理模式原因:这是Spring AOP的底层

  2. 代理模式的分类:

    1. 静态代理
    2. 动态代理

    image-20260319151238558

    静态代理

    • 抽象角色 :一般使用抽象类和接口来解决
    • 真实角色:被代理的角色
    • 代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作
    • 客户:访问代理对象

    代码步骤:

    1. 接口

      public interface UserService {
          public void add();
          public void delete();
          public void update();
          public void find();
      }
      
      
    2. 真实角色

      public class UserServiceImpl implements UserService {
          @Override
          public void add() {
              System.out.println("addUser");
          }
      
          @Override
          public void delete() {
              System.out.println("deleteUser");
          }
      
          @Override
          public void update() {
              System.out.println("updateUser");
          }
      
          @Override
          public void find() {
              System.out.println("findUser");
          }
      }
      
      
    3. 代理角色

      public class UserServiceProxy implements UserService{
          private UserServiceImpl UserServiceImpl;
      
          public void setUserServiceImpl(UserServiceImpl userServiceImpl) {
              UserServiceImpl = userServiceImpl;
          }
      
          @Override
          public void add() {
              log("add");
              UserServiceImpl.add();
          }
      
          @Override
          public void delete() {
              log("delete");
              UserServiceImpl.delete();
          }
      
          @Override
          public void update() {
              log("update");
              UserServiceImpl.update();
          }
      
          @Override
          public void find() {
              log("find");
              UserServiceImpl.find();
          }
          public void log(String msg){
              System.out.println("log"+msg);
          }
      }
      
      
    4. 客户

      public class Client {
          public static void main(String[] args) {
              UserServiceProxy userServiceProxy = new UserServiceProxy();
              userServiceProxy.setUserServiceImpl(new UserServiceImpl());
              //代理里面会有其他附属操作
              userServiceProxy.add();
          }
      }
      
      

    代理模式的好处:

    • 可以使真实角色更加纯粹!不同去关注一些公共的服务
    • 公共的也就交给代理角色!实现业务的分工
    • 公共业务发生拓展的时候,方便集中管理!

    缺点:

    • 一个真实角色就会产生一个代理角色
  3. 动态代理
    • 动态代理和静态代理角色一样
    • 动态代理的代理类是动态生成的,不是我们直接写好的
    • 动态代理分为两大类:基于接口的动态代理,基于类的动态代理
      1. 基于接口--JDK动态代理
      2. 基于类:cglib
      3. java字节码实现;:javaSiSt

    需要了解两个类: Proxy:代理, InvocationHandler:调用处理程序

    优点:

    • 动态代理和静态代理角色一样
    • 动态代理的代理类是动态生成的,不是我们直接写好的
    • 动态代理分为两大类:基于接口的动态代理,基于类的动态代理
    • 一个动态代理类代理是一个接口,一般对应一类业务
    • 一个动态代理类可以代理多个类,只要实现了同一个接口

    感受:虽然没有弄懂怎么来的,但会用而且觉得这个很厉害很实用。

posted @ 2026-03-20 21:14  三咲肘击王  阅读(7)  评论(0)    收藏  举报