Java进阶之 JDK动态代理与Cglib动态代理

本文对比介绍了Java中的JDK动态代理和Cglib动态代理,详细讲解了两者的工作原理和使用示例。JDK动态代理适用于有实现接口的对象,而Cglib则能在没有接口的情况下实现代理。Cglib通过字节码技术生成被代理类的子类,代理方法通过方法拦截技术实现。此外,文章还提到了动态代理在Spring AOP中的应用。
摘要由CSDN通过智能技术生成
一、动态代理概述:

    与静态代理对照(关于静态代理的介绍 可以阅读上一篇:JAVA设计模式之 代理模式【Proxy Pattern】),

    动态代理类的字节码是在程序运行时由Java反射机制动态生成。

    注意: 
      1、AspectJ是采用编译时生成AOP代理类,具有更好的性能,但是需要使用特定的编译器进行处理

      2、Spring AOP采用运行时生成AOP代理类,无需使用特定编译器进行处理,但是性能相对于AspectJ较差


二、JDK动态代理 [对有实现接口的对象做代理]

    1、JDK动态代理中 需要了解的两个重要的类或接口 [InvocationHandler 和 Proxy]

         ① InvocationHandler接口

public interface InvocationHandler { 
    public Object invoke(Object proxy,Method method,Object[] args) throws Throwable; 
} 
参数说明: 
Object proxy:指被代理的对象 
Method method:我们所要调用被代理对象的某个方法的Method对象
Object[] args:被代理对象某个方法调用时所需要的参数 

可以将InvocationHandler接口的子类想象成一个代理的最终操作类。

说明:每一个动态代理类都必须要实现InvocationHandler这个接口,并且每个代理类(Proxy)的实例都关联到了一个handler,当我们通过代理对象调用一个方法的时候,这个方法的调用就会被转发为由InvocationHandler这个接口的 invoke 方法来进行调用。同时在invoke的方法里 我们可以对被代理对象的方法调用做增强处理(如添加事务、日志、权限验证等操作)。

         ② Proxy类

 Proxy类是专门完成代理的操作类,可以通过此类为一个或多个接口动态地生成实现类,该类常用的调用方法如下:

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值