cglib 实现动态代理

本文介绍如何使用Cglib实现动态代理,包括下载所需jar包、创建MethodInterceptor接口实现类、并提供测试代码示例。

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

一、下载cglib的jar包

可以去这个地址下载 http://download.youkuaiyun.com/detail/jarremdon/9624537

二、 创建 实现类 实现  MethodInterceptor 接口代码如下:

package com.cglib.Proxy;


import java.lang.reflect.Method;


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


/**
 * 实现原理cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,
 * 所以不能对final修饰的类进行代理。
 * 
 * @author 思 路
 * @time 2017年4月27日
 */
public class Cglib implements MethodInterceptor {
private Object object;


public Cglib(Object object) {
// TODO Auto-generated constructor stub
this.object = object;
}


public Object getProxy() {
// Enhance (增强版)
Enhancer enhancer = new Enhancer();
// 设置 父类 代理的类
enhancer.setSuperclass(object.getClass());
// 设置回调类为本类
enhancer.setCallback(this);
// 生成实现实现类
return enhancer.create();
}


@Override
public Object intercept(Object arg0, Method arg1, Object[] arg2,
MethodProxy arg3) throws Throwable {
// TODO Auto-generated method stub
System.out.println("注水前");
arg3.invokeSuper(arg0, arg2);
System.out.println("注水后边");
return null;
}


}

三、测试

为实现接口类

package com.cglib.Proxy;


/**
 * @author 思 路
 * @time 2017年4月27日
 */
public class Myself {


public Myself() {
// TODO Auto-generated constructor stub
}


public void say() {
System.out.println("我是我,不一样的烟火");
}


}

测试类

package com.cglib.Proxy;


import org.junit.Test;


/**
 * @author 思 路
 * @time 2017年4月27日
 */
public class CglibTest {


public CglibTest() {
// TODO Auto-generated constructor stub
}


@Test
public void test() {
Cglib cglib = new Cglib(new Myself());
Myself myself = (Myself) cglib.getProxy();
myself.say();
}


}

结果如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值