代理模式:静态代理与动态代理(JDK、CGLIB、javassist动态代理)

代理模式是设计模式中的重要概念,用于控制对目标对象的访问并实现功能增强。本文详细介绍了静态代理和动态代理,包括JDK动态代理、CGLIB动态代理以及javassist动态代理的工作原理和应用场景。动态代理如CGLIB利用字节码技术在运行时生成代理类,适用于非final类和方法的代理,而javassist与JDK动态代理类似,通过代理工厂创建代理对象。
摘要由CSDN通过智能技术生成

参考资料


一,代理模式​

  代理模式是23种设计模式中的一种,代理模式就是给一个对象提供一个代理,就像我们生活中的中介(租房、留学、相亲),由代理对象控制原目标对象的访问,所以在代理对象中就可以实现对目标对象功能的增强、扩展、甚至改写。

  • 为什么需要代理?

  因为一个良好的设计不应该被轻易的修改,这正是开闭原则的体现:一个良好的设计应该对修改关闭,对扩展开放。而代理正是为了扩展类而存在,他可以控制对现有类(也就是被代理的类)的访问,通俗的说就是可以拦截对现有类方法的调用并做出响应的处理

  代理模式的实际应用场景:aop、权限控制、服务监控、缓存、日志、限流、事务、拦截过滤等。

1.1 代理模式分为静态代理动态代理

1.1.1 静态代理

  静态代理就是我们自己手写代理类;aspect静态代理(编译器生成代理类)。静态代理:(目标接口、目标接口实现、代理类)。

// 创建目标接口TargetInterface
public interface TargetInterface {
   
    void sayHello(String name);
    void sayThanks(String name);
}

// 创建目标接口的实现类
public class TargetIntegerfaceImpl implements TargetInterface{
   
    @Override
    public void sayHello(String name) {
   
      System.out.println("sayHello: " + name);
    }

    @Override
    public void sayThanks(String name) {
   
      System.out.println("sayThanks: " + name);
    }
}

// 创建测试类
public class proxy_static_test {
   
    public static void main(String[] args) {
   
        // 1. 通过创建接口的实现类, 来代理该接口
        TargetInterface targetInterface = new TargetIntegerfaceImpl();
        targetInterface.sayHello("张三");
        targetInterface.sayThanks("李四");
    }
}

                
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值