CGLib可以为那些方法生成代理

    科技2022-08-05  103

    https://yuanyu.blog.csdn.net/article/details/108754891

    CGLib通过ASM动态操作指令生成了被代理类的子类,重写了目标类中所有的非private非final非static方法

    public&protected&默认

    public class RealSubject { public void m1() { System.out.println("public..."); } private void m2() { System.out.println("private..."); } protected void m3() { System.out.println("protected..."); } void m4() { System.out.println("package..."); } public final void m5() { System.out.println("final..."); } // static public static void m10() { System.out.println("public static..."); } private static void m11() { System.out.println("private static..."); } // 测试 private public static void main(String[] args) { RealSubject realSubject = new RealSubject(); RealSubject proxy = (RealSubject) new DynamicCglibProxy(realSubject).getProxyInstance(); proxy.m2(); // private 不可以 proxy.m11(); // private static 不可以 } } public class DynamicCglibProxy implements MethodInterceptor { private final Object target; public DynamicCglibProxy(Object target) { this.target = target; } /** * 返回一个代理对象 */ public Object getProxyInstance() { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(target.getClass()); enhancer.setCallback(this); enhancer.setUseCache(false); return enhancer.create(); } @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { // 不做处理 if (Object.class.equals(method.getDeclaringClass())) { return method.invoke(target, args); } System.out.println("proxy start..."); Object res = method.invoke(target, args); System.out.println("proxy end..."); System.out.println(); return res; } } public class DynamicTest { public static void main(String[] args) { RealSubject realSubject = new RealSubject(); RealSubject proxy = (RealSubject) new DynamicCglibProxy(realSubject).getProxyInstance(); proxy.m1(); // public 可以 proxy.m3(); // protected 可以 proxy.m4(); // 默认 可以 proxy.m5(); // final 不可以 proxy.m10(); // public static 不可以 } } https://www.jb51.net/article/120309.htmhttps://www.oschina.net/question/1457994_2302959https://www.jianshu.com/p/6b740b0ed34ehttps://blog.csdn.net/P19777/article/details/103967383

     

    Processed: 0.014, SQL: 8