1.pom文件
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.2.10</version>
</dependency>
2.测试类A
package com.knife.testcglib;
public class A {
public void test(){
System.out.println("test ...");
}
public int add(int i){
return i++;
}
}
3.实现MethodInterceptor的类
package com.knife.testcglib;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
public class MyInterceptor implements MethodInterceptor {
public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {
// TODO Auto-generated method stub
System.out.println(arg1.getName()+" be called ");
if(arg2!=null){
System.out.println("params:");
for(Object o:arg2)
System.out.println(o.toString());
}
if(arg1.getName().equals("add"))
return 100;
else
return null;
}
}
4.测试
package com.knife.testcglib;
import net.sf.cglib.proxy.Enhancer;
public class testCglib {
public static void main(String args[]){
MyInterceptor mi=new MyInterceptor();
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(A.class);
enhancer.setCallback(mi);
A a=(A)enhancer.create();
a.test();
System.out.println(a.add(1));
}
}
5.结果
test be called
params:
add be called
params:
1
100
本文详细介绍使用CGLIB库实现实时动态代理的过程。通过创建一个简单的测试类A,结合自定义的MethodInterceptor实现类MyInterceptor,演示了如何利用CGLIB的Enhancer类动态生成代理对象并拦截方法调用。实验结果显示,方法调用被成功拦截并修改返回值。
1824

被折叠的 条评论
为什么被折叠?



