CglibProxyDemo.java 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package com.sf.design.proxy;
  2. import net.sf.cglib.proxy.Enhancer;
  3. import net.sf.cglib.proxy.MethodInterceptor;
  4. import net.sf.cglib.proxy.MethodProxy;
  5. import java.io.IOException;
  6. import java.lang.reflect.Method;
  7. // cglib动态代理
  8. // 添加jvm参数 --add-opens java.base/java.lang=ALL-UNNAMED
  9. public class CglibProxyDemo {
  10. // 目标类
  11. static class MyLife {
  12. public void learn() {
  13. System.out.println("learn");
  14. }
  15. }
  16. public static void main(String[] args) throws IOException {
  17. // 目标对象
  18. MyLife myLife = new MyLife();
  19. // 接收代理对象
  20. // cglib的动态代理是基于 继承目标类 extends MyLife
  21. MyLife object = (MyLife)Enhancer.create(MyLife.class, new MethodInterceptor() {
  22. @Override
  23. public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
  24. System.out.println("before");
  25. Object result = method.invoke(myLife, objects);
  26. System.out.println("after");
  27. return result;
  28. }
  29. });
  30. object.learn();
  31. System.out.println(object.getClass());
  32. System.in.read();
  33. }
  34. }