`

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:

Java代码 
public class MyClass {

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

}
 

Main.java:

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;
    }
  }
}
 


打印结果为:

Java代码 
public void MyClass.print() intercepted!
I'm in MyClass.print!
 


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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics