CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM(Java字节码操控框架),来转换字节码并生成新的类。除了CGLIB包,脚本语言例如 Groovy和BeanShell,也是使用ASM来生成java的字节码。当不鼓励直接使用ASM,因为它要求你必须对JVM内部结构包括class文件的格式和指令集都很熟悉。所以cglib包要依赖于asm包,需要一起导入。
代码:
package com.cglib;
public class UserDao {
	public void addUser() {
		System.out.println("addUser");
	}
} 
package com.cglib;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
public class UserDaoCglib implements MethodInterceptor {
	private Object target;
	public Object getInstance(Object target) {
		this.target = target;
		Enhancer enhancer = new Enhancer();
		enhancer.setSuperclass(this.target.getClass());
		enhancer.setCallback(this);
		return enhancer.create();
	}
	public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
		System.out.println("begin");
		proxy.invokeSuper(obj, args);
		System.out.println("end");
		return null;
	}
} 
 测试类: 
package com.cglib;
public class Test {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		UserDaoCglib cglib = new UserDaoCglib();
		UserDao userDao = (UserDao) cglib.getInstance(new UserDao());
		userDao.addUser();
	}
} 
 cglib的maven: 
<dependency>
	<groupId>cglib</groupId>
	<artifactId>cglib</artifactId>
	<version>3.1</version>
</dependency> 










