spring aop学习7:Cglib动态代理(基于继承代理)

一.cglib东动态代理
1.通过net.sf.cglib.proxy.Enhancer动态生成代理对象
2.需要实现net.sf.cglib.proxy.MethodInterceptor接口

二.上代码
1.需要导入的jar包:asm-2.2.3.jar和cglib-nodep-3.2.5.jar
2.目标类:TargetObject.java

package com.tiglle.cglib.dynamic.proxy;
//目标类
public class TargetObject{

    public String medhod1(String str) {
        System.out.println("方法1");
        return str;
    }

    public String method2(String str) {
        System.out.println("方法2");
        return str;
    }

}

3.MethodInterceptor的子类:CglibObject.java

package com.tiglle.cglib.dynamic.proxy;

import java.lang.reflect.Method;

import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

//创建MethodInterceptor的实现类
public class CglibObject implements MethodInterceptor{

    //实现intercept方法
    @Override
    public Object intercept(Object target, Method method, Object[] args, MethodProxy proxy) throws Throwable {
        System.out.println("前置:before");
        Object result = null;
        try {
             //使用方法反射调用目标对象方法
            result = proxy.invokeSuper(target, args);

            System.out.println("返回通知:AfterReturning");
        } catch (Exception e) {
            System.out.println("异常通知:AfterThrowing");
        }finally{
            System.out.println("后置通知:After1");
        }
        System.out.println("后置通知:After2");
        return result;
    }

}

4.测试使用:UseExec.java

package com.tiglle.cglib.dynamic.proxy;

import net.sf.cglib.proxy.Enhancer;

public class UseExec {

    public static void main(String[] args) {
        //调用
        //创建动态生成代理对象(目标对象的子类)的类Enhancer
        Enhancer enhancer = new Enhancer();
        //设置目标对象(生成的代理类为其子类)
        enhancer.setSuperclass(TargetObject.class);
        //指定一个回调函数,这个函数就和Proxy的 invoke()类似
        enhancer.setCallback(new CglibObject());
        //生成代理类,向上转型,实际上调用的时代理类(子类)的方法
        TargetObject dynamicProxy = (TargetObject) enhancer.create();

        //调用代理类的方法
        dynamicProxy.medhod1("小明");
        dynamicProxy.method2("小红");
    }

}

运行结果:
前置:before
方法1
返回通知:AfterReturning
后置通知:After1
后置通知:After2

前置:before
方法2
返回通知:AfterReturning
后置通知:After1
后置通知:After2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值