Spring:08 AOP-基于cglib的动态代理

Spring:AOP-基于cglib的动态代理

cglib是一个第三方框架,专门做代理的。Spring集成了它。

cglib实现代理是**基于“类继承”**的:代理对象是继承目标对象的,是父子关系,子加强了父。

实现步骤:

1、创建目标对象 Target

2、创建增强对象 Advice

3、创建代理对象类 MyProxy

4、编写测试代码

1、创建目标对象 Target

public class Target{
    public void save() {
        System.out.println("Target: save() running...");
    }
}

2、创建增强对象 Advice

public class Advice {
    public void before(){
        System.out.println("前置增强...");
    }

    public void afterReturning(){
        System.out.println("后置增强...");
    }
}

3、创建代理对象类 MyProxy

public class MyProxy {

    // 定义目标对象、增强对象
    private Target target = new Target();
    private Advice advice = new Advice();

   public Target getProxy(){
       // 创建增强对象
       Enhancer enhancer = new Enhancer();

       // 给增强对象设置父类
       enhancer.setSuperclass(Target.class);

       // 设置回调函数
       // public void setCallback(Callback callback)
       enhancer.setCallback(new MethodInterceptor() {
           /**
            * SpringMVC中的拦截器:方法拦截器
            * @param proxy          代理对象
            * @param method         目标方法对象
            * @param args        	目标方法参数
            * @param methodProxy    方法代理
            * @return
            * @throws Throwable
            */
           @Override
           public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
               //前置增强
               advice.before();
               //反射调用目标方法
               Object obj = method.invoke(target, args);
               //后置增强
               advice.afterReturning();
               return obj;
           }
       });

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

4、编写测试代码

测试包下写

public class CglibProxyTest {

    /**
     * 测试基于cglib的动态代理
     */
    @Test
    public void test01(){
        //创建代理对象
        Target proxy = new MyProxy().getProxy();

        //通过代理对象调用目标方法
        proxy.save();
    }
}

控制台打印内容:

前置增强...
Target: save() running...
后置增强...

分析总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值