cglib的动态代理

最近开发过程中,遇到一个问题。系统中有一个不能改动的方法,但是我想在方法执行前后记录各自记录一条日志到数据库,所以用了两天去学了一下Cglib的动态代理。也是所谓的AOP的一种方式吧。

动态代理的作用和意义:

在不改动原有代码的基础上,对某些方式插入一下前置或者后置的操作,如request之前,要记一下log。

准备工作,Cglib需要两个jar包的支持才能运行起来。

asm.jar

cglib.jar

CgLib的实现:

1. 做一个代理类,实现MethodInterceptor接口

public class DaoProxy implements MethodInterceptor{

private Enhancer enhancer = new Enhancer();

public<T> Object getProxy(Class<T> clazz){

//指定要代理的类

enhancer.setSuperclass(clazz);

//指定回调函数

enhancer.setCallback(this);

//创建代理返回

return enhancer.create();

}

public Object intercept(Object obj, Method method, Object[] params,

MethodProxy proxy) throws Throwable {

System.out.println("前置代理.....");

//执行父类的方法,并得到结果

Object result = proxy.invokeSuper(obj, params);

System.out.println("后置代理.....");

return result;

}

}

2.做一个要被代理的Dao,也就是父类

public class UserDao {

public void add(){

System.out.println("add。。。。");

}

public void delete(){

System.out.println("delete。。。。");

}

}

3.测试代码。

现在我就希望不改动UserDao的情况下,在add和delete的前后各自打印一句话。

 

public static void main(String[] args) {

DaoProxy proxy = new DaoProxy();//通过代理得到UserDao

UserDao userDao = (UserDao) proxy.getProxy(UserDao.class);

userDao.add();

userDao.delete();

}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值