cglib的jar包实现动态代理

2014-11-24 01:22:23 · 作者: · 浏览: 1

导入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纳秒