`
m635674608
  • 浏览: 5043609 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spring jdk动态代理源码 as cglib代理源码

 
阅读更多

jdk动态代理类的源码

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.lang.reflect.UndeclaredThrowableException;

public final class $Proxy0 extends Proxy implements Manager {

private static Method m1;
private static Method m0;
private static Method m3;
private static Method m2;

static {
   try {
    m1 = Class.forName("java.lang.Object").getMethod("equals",
      new Class[] { Class.forName("java.lang.Object") });
    m0 = Class.forName("java.lang.Object").getMethod("hashCode",
      new Class[0]);
    m3 = Class.forName("com.ml.test.Manager").getMethod("modify",
      new Class[0]);
    m2 = Class.forName("java.lang.Object").getMethod("toString",
      new Class[0]);
   } catch (NoSuchMethodException nosuchmethodexception) {
    throw new NoSuchMethodError(nosuchmethodexception.getMessage());
   } catch (ClassNotFoundException classnotfoundexception) {
    throw new NoClassDefFoundError(classnotfoundexception.getMessage());
   }
}

public $Proxy0(InvocationHandler invocationhandler) {
   super(invocationhandler);
}

@Override
public final boolean equals(Object obj) {
   try {
    return ((Boolean) super.h.invoke(this, m1, new Object[] { obj }))
      .booleanValue();
   } catch (Throwable throwable) {
    throw new UndeclaredThrowableException(throwable);
   }
}

@Override
public final int hashCode() {
   try {
    return ((Integer) super.h.invoke(this, m0, null)).intValue();
   } catch (Throwable throwable) {
    throw new UndeclaredThrowableException(throwable);
   }
}

public final void modify() {
   try {
    super.h.invoke(this, m3, null);
    return;
   } catch (Error e) {
   } catch (Throwable throwable) {
    throw new UndeclaredThrowableException(throwable);
   }
}

@Override
public final String toString() {
   try {
    return (String) super.h.invoke(this, m2, null);
   } catch (Throwable throwable) {
    throw new UndeclaredThrowableException(throwable);
   }
}
}

  cglib 动态代理产生的源码

 

package com.zhang.shine.cache;

import java.lang.reflect.Method;
import java.util.Map;
import net.sf.cglib.core.Signature;
import net.sf.cglib.proxy.Callback;
import net.sf.cglib.proxy.Dispatcher;
import net.sf.cglib.proxy.Factory;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import net.sf.cglib.proxy.NoOp;
import org.springframework.aop.SpringProxy;
import org.springframework.aop.framework.Advised;

public class Sev$$EnhancerByCGLIB$$e8033e73 extends Sev
  implements SpringProxy, Advised, Factory
{
  private boolean CGLIB$BOUND;
  private boolean CGLIB$CONSTRUCTED;
  private static final ThreadLocal CGLIB$THREAD_CALLBACKS;
  private static final Callback[] CGLIB$STATIC_CALLBACKS;
  private MethodInterceptor CGLIB$CALLBACK_0;
  private MethodInterceptor CGLIB$CALLBACK_1;
  private NoOp CGLIB$CALLBACK_2;
  private Dispatcher CGLIB$CALLBACK_3;
  private Dispatcher CGLIB$CALLBACK_4;
  private MethodInterceptor CGLIB$CALLBACK_5;
  private MethodInterceptor CGLIB$CALLBACK_6;
  private static final Method CGLIB$getSort$0$Method;
  private static final MethodProxy CGLIB$getSort$0$Proxy;
  private static final Object[] CGLIB$emptyArgs;
  private static final Method CGLIB$getSort$1$Method;
  private static final MethodProxy CGLIB$getSort$1$Proxy;
  private static final Method CGLIB$hashCode$3$Method;
  private static final MethodProxy CGLIB$hashCode$3$Proxy;
  private static final Method CGLIB$clone$4$Method;
  private static final MethodProxy CGLIB$clone$4$Proxy;
  private static final Method CGLIB$equals$5$Method;
  private static final MethodProxy CGLIB$equals$5$Proxy;
  private static final Method CGLIB$toString$6$Method;
  private static final MethodProxy CGLIB$toString$6$Proxy;

  static void CGLIB$STATICHOOK1()
  {
    CGLIB$THREAD_CALLBACKS = new ThreadLocal();
    Class localClass;
    CGLIB$emptyArgs = new Object[0];
    ClassLoader tmp27_17 = (localClass = Class.forName("com.zhang.shine.cache.Sev$$EnhancerByCGLIB$$e8033e73")).getClassLoader();
    CGLIB$getSort$0$Proxy = MethodProxy.create(tmp27_17, (e8033e73.CGLIB$getSort$0$Method = Class.forName("com.zhang.shine.cache.Sev").getDeclaredMethod("getSort", new Class[] { Integer.TYPE, Integer.TYPE })).getDeclaringClass(), localClass, "(II)Ljava/util/Map;", "getSort", "CGLIB$getSort$0");
    ClassLoader tmp74_27 = tmp27_17;
    CGLIB$getSort$1$Proxy = MethodProxy.create(tmp74_27, (e8033e73.CGLIB$getSort$1$Method = Class.forName("com.zhang.shine.cache.Sev").getDeclaredMethod("getSort", new Class[0])).getDeclaringClass(), localClass, "()V", "getSort", "CGLIB$getSort$1");
    ClassLoader tmp109_74 = tmp74_27;
    CGLIB$hashCode$3$Proxy = MethodProxy.create(tmp109_74, (e8033e73.CGLIB$hashCode$3$Method = Class.forName("java.lang.Object").getDeclaredMethod("hashCode", new Class[0])).getDeclaringClass(), localClass, "()I", "hashCode", "CGLIB$hashCode$3");
    ClassLoader tmp144_109 = tmp109_74;
    CGLIB$clone$4$Proxy = MethodProxy.create(tmp144_109, (e8033e73.CGLIB$clone$4$Method = Class.forName("java.lang.Object").getDeclaredMethod("clone", new Class[0])).getDeclaringClass(), localClass, "()Ljava/lang/Object;", "clone", "CGLIB$clone$4");
    ClassLoader tmp179_144 = tmp144_109;
    CGLIB$equals$5$Proxy = MethodProxy.create(tmp179_144, (e8033e73.CGLIB$equals$5$Method = Class.forName("java.lang.Object").getDeclaredMethod("equals", new Class[] { Class.forName("java.lang.Object") })).getDeclaringClass(), localClass, "(Ljava/lang/Object;)Z", "equals", "CGLIB$equals$5");
    CGLIB$toString$6$Proxy = MethodProxy.create(tmp179_144, (e8033e73.CGLIB$toString$6$Method = Class.forName("java.lang.Object").getDeclaredMethod("toString", new Class[0])).getDeclaringClass(), localClass, "()Ljava/lang/String;", "toString", "CGLIB$toString$6");
    return;
  }

  final Map CGLIB$getSort$0(int paramInt1, int paramInt2)
  {
    return super.getSort(paramInt1, paramInt2);
  }

 

 

 它们底层都是通过动态产生字节码,动态编译而运行的。

  • 大小: 271.7 KB
分享到:
评论
1 楼 HelloWorld3443 2016-01-25  
代理的源代码是怎么获取到的啊,

相关推荐

    浅谈JDK动态代理与CGLIB代理去区别

    在"通过Configuration文件实现AOP.docx"文档中,可能会详细讲述如何在Spring配置文件中配置AOP代理,包括如何选择使用JDK动态代理还是CGLIB。 总结来说,JDK动态代理简单且高效,适合接口驱动的设计,而CGLIB适用于...

    CGLIB 和 JDK生成动态代理类的区别

    在实际应用中,Spring框架就同时使用了JDK动态代理和CGLIB。当目标对象实现了接口时,Spring会选择JDK动态代理;如果没有实现接口,则使用CGLIB。 总结来说,CGLIB和JDK动态代理都是为了实现运行时的方法拦截,但...

    jdk动态代理 cglib3.0动态代理

    JDK和CGLIB是两种常用的实现Java动态代理的方式。本文将深入探讨这两个库以及它们的工作原理。 **JDK动态代理** JDK动态代理基于Java反射API实现,它提供了`java.lang.reflect.Proxy`类和`java.lang.reflect....

    四、Spring源码分析——动态代理

    Spring支持两种类型的动态代理:JDK动态代理和CGLIB代理。 - **JDK动态代理**:基于接口实现,如果目标对象实现了至少一个接口,Spring会选择使用JDK动态代理。代理对象会实现与目标对象相同的接口,并在调用接口...

    代理模式,JDK动态代理,SpringAOP来龙去脉

    - Spring支持两种类型的代理:JDK动态代理(如果目标对象实现了接口)和CGLIB代理(如果目标对象没有接口,使用字节码生成技术)。 - 在Spring配置中,可以使用`@Aspect`注解定义切面,`@Before`、`@After`、`@...

    动态代理cglibjar包和源码

    3. **CGLIB源码分析**: - 在CGLIB的源码中,`net.sf.cglib.proxy.Enhancer`是核心类,负责生成代理对象。它内部会使用ASM来创建子类,并通过`MethodProxy`对象来调用原方法。 - `...

    Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)

    在Java中,我们可以使用JDK自带的动态代理或者第三方库如CGLIB、Javassist、ASM来实现。 **JDK动态代理**: JDK的动态代理主要依赖于`java.lang.reflect.Proxy`和`java.lang.reflect.InvocationHandler`两个类。...

    从JDK动态代理到spring AOP

    它提供了一种更高级的动态代理机制,不仅可以基于JDK动态代理,还可以基于CGLIB库生成字节码实现代理。AOP允许开发者定义“切面”(Aspect),切面封装了关注点,如日志、事务、安全检查等,使得这些功能可以独立于...

    Spring源码缺失的spring-cglib-repack-3.2.6.jar和spring-objenesis-repack-2.6.jar

    在Spring AOP中,有两种主要的代理方式:JDK动态代理和CGLib代理。JDK动态代理基于接口,如果目标对象实现了至少一个接口,Spring会使用JDK的Proxy类生成一个代理对象。而如果没有接口或者接口方法不能满足需求,...

    spring动态代理

    Spring 提供了两种类型的代理:JDK 动态代理和 CGLIB 代理。如果目标类实现了至少一个接口,Spring 默认使用 JDK 动态代理;如果没有实现接口,或者为了提高性能,Spring 可以选择使用 CGLIB 代理。 4. **JDK动态...

    CGlib实现动态代理(承接上面JDK实现动态代理)

    与JDK的动态代理不同,JDK代理基于接口,如果目标类没有实现接口,就无法使用JDK的动态代理。而CGlib则无需目标类实现任何接口,因此它的应用范围更广。 以下是使用CGlib实现动态代理的关键步骤: 1. 引入依赖:在...

    JDK、CGLib动态代理

    在Spring框架中,当目标对象不支持JDK动态代理(即没有实现接口)时,CGLib就会被用来创建代理。CGLib通过创建目标类的子类并覆盖其方法来实现动态代理。使用CGLib的主要类有`net.sf.cglib.proxy.Enhancer`和`...

    Spring CGLlB动态代理实现过程解析

    Spring CGLIB动态代理是Spring框架中的一种动态代理机制,它通过CGLIB(Code Generation Library)生成代理类来实现动态代理。CGLIB是一个高性能的开源代码生成包,能够在运行时生成指定对象的子类,从而实现动态...

    从JDK动态代理看Spring之AOP实现

    Spring的AOP实现有两种方式:JDK动态代理和CGLIB字节码代理。当目标对象实现了一个或多个接口时,Spring会选择使用JDK动态代理。以下是Spring AOP使用JDK动态代理的基本步骤: 1. **创建代理对象**:Spring会创建一...

    SPRING对动态代理的封装

    总结一下,Spring对动态代理的封装主要体现在AOP框架的设计上,它通过JDK动态代理和CGLIB实现了对目标对象的透明代理,方便地实现了面向切面编程。开发者可以通过配置XML或注解定义切面,使用通知来扩展或改变目标...

    spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.5.1.jar

    1. 高性能:相对于其他动态代理库(如Java的反射API或JDK动态代理),CGLIB的代理效率更高。 2. 易于使用:Spring框架已经封装了CGLIB的使用,开发者通常不需要直接与CGLIB库交互。 `spring-objenesis-repack-2.5.1...

    jdk代理,cgib代理和spring后处理bean的关系

    在Java开发中,代理模式...当Spring容器创建一个Bean时,如果该Bean被标记为可代理的,Spring会使用JDK或CGLIB创建一个代理Bean,然后将这个代理Bean传递给BeanPostProcessor的`postProcessBeforeInitialization()`和`...

    动态代理设计模式 日志和源码

    Spring支持JDK动态代理和CGLIB代理,根据目标对象是否实现接口来选择合适的代理方式。通过定义切面(Aspect),我们可以定义切入点(Pointcut)来指定何时应用增强(Advice),如环绕通知(Around advice)可以在...

    day39-Spring 04-CGLIB的动态代理

    CGLIB被广泛应用于Spring AOP(面向切面编程)中,用于实现对目标对象的动态代理,以提供方法拦截、事务管理、性能监控等功能。 首先,我们要理解什么是动态代理。在Java中,动态代理是一种在运行时创建代理类的...

Global site tag (gtag.js) - Google Analytics