Spring AOP底层 基于cglib的动态代理生成

本文介绍了一种基于Cglib的动态代理技术实现方法。通过示例代码详细讲解了如何利用Cglib对目标对象的方法进行前置和后置增强。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

我们都知道AOP常用的动态代理技术有两种

  • 一种是JDK代理:一种基于接口的动态代理技术
  • 另一种是cglib代理:基于父类的动态代理技术
  • JDK代理需要一个接口才行,而cglib只需要代理对象就行,cglib的底层好像也是调用的JDK的动态代理

现在我们只说一下cglib的动态代理

目标对象

public class Target {

    public void method(){
        System.out.println("method 执行。。。。。。。。。。。");
    }
}

接下来我们要对这个目标代码进行增强

增强类

增强有两种,一种是前置增强,一种是后置增强

package yang.com.proxy;

public class Advice {

    public void beforAdvice(){
        System.out.println("前置增强方法---------");
    }

    public void afterAdvice(){
        System.out.println("后置增强方法---------");
    }
}

测试代码

总共有这么几步

1.实例化目标对象

2.实例化增强对象

3.创建增强器

4.设置父类(目标)

5.设置回调
enhancer.setCallback(new MethodInterceptor() {
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
      执行前置增强
      method.invoke(target,args);
      执行后置增强
      return invoke;
    }
});

6.创建代理对象

 


public class ProxyTest {


    public static void main(final String[] args) {
        final Target target =new Target();//目标对象

        final Advice advice = new Advice();//增强对象

        //返回值 动态代理生成对象 基于cglib

        //创建增强器
        Enhancer enhancer = new Enhancer();
        //设置父类(目标)

        enhancer.setSuperclass(Target.class);
        //设置回调
        enhancer.setCallback(new MethodInterceptor() {
            public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
              advice.beforAdvice();//执行前置增强
              Object invoke = method.invoke(target,args);
              advice.afterAdvice();//执行后置增强
                return invoke;
            }
        });

        //创建代理对象
        Target proxy =(Target)enhancer.create();
        proxy.method();
    }


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值