导入cglib-nodep-2.1_3.jar
package com.jxnu.cglib;
public class Person {
public void m1(){
System.out.println("方法一执行了");
}
public void m2(){
System.out.println("方法二执行了");
}
}
package com.jxnu.cglib;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Callback;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
public class PersonDemo {
public static void main(String[] args) {
final Person p = new Person();
//返回p的动态代理对象:该代理对象是Person的子类
Person pp = (Person)Enhancer.create(p.getClass(), new MethodInterceptor(){
@Override
public Object intercept(Object proxy, Method method, Object[] arg2,
MethodProxy arg3) throws Throwable {
long time = System.nanoTime();//纳秒 1毫秒=1000纳秒
Object obj = method.invoke(p, arg2);
System.out.println(method.getName()+"运行耗时:"+(System.nanoTime()-time)+"纳秒");
return obj;
}
});
pp.m1();
pp.m2();
}
}
会拦截person类的所有方法。一种动态的,method不确定,是动态的。
输出结果为:
方法一执行了
m1运行耗时:262234纳秒
方法二执行了
m2运行耗时:49461纳秒