首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

cglib 动态署理

2012-11-08 
cglib 动态代理cglib is a powerful, high performance and quality Code Generation Library, It is used

cglib 动态代理

cglib is a powerful, high performance and quality Code Generation Library, It is used to extend JAVA classes and implements interfaces at runtime.
cglib是Code Generation Library的缩写。
cglib依赖于ASM库。
Hibernate主要是利用cglib生成pojo的子类并override get方法来实现lazy loading机制,Spring则是利用cglib来实现动态代理。
而JDK的动态代理机制要求有接口才行,这样就强制我们的pojo实现某个接口。

这里还是提供一个cglib的入门级的示例:
MyClass.java:

public class MyClass { public void print() { System.out.println("I'm in MyClass.print!"); }}?

Main.java:

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 Main { public static void main(String[] args) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(MyClass.class); enhancer.setCallback(new MethodInterceptorImpl()); MyClass my = (MyClass) enhancer.create(); my.print(); } private static class MethodInterceptorImpl implements MethodInterceptor { public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { // log something System.out.println(method + " intercepted!"); proxy.invokeSuper(obj, args); return null; } }}?


打印结果为:

public void MyClass.print() intercepted!I'm in MyClass.print!?


这个示例就基本上实现了日志AOP的功能,很简单吧。

热点排行