`
shangtang004
  • 浏览: 32354 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

子类代理,接口代理

阅读更多

1、JDK动态代理
 java.lang.reflect.InvocationHandler 调用处理器
java.lang.reflect.Proxy 代理类的父类,是所有jdk代理类的父类
JDK代理类是接口代理,因为它继承了proxy这个类,java是单继承的
jdk代理类通过调用处理器中的invoke方法来实现动态代理的目的,
invoke签名,
public Object invoke(Object proxy,Method method,Object[] args);
proxy 代理实例,method 接口方法的Method实例,args 调用方法的参数数组

代理实例创建
 Proxy.newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler handler);
loader 代理类的类加裁器,interfaces 代理类要实现的接口列表,handler 调用处理器

实现过程
 1),实现一个调用处理器,这个自定义调用处理器传入一个目标对象target,在invoke方法
  method.invoke(target,args);这个语句前后加入要织入的代码,比如事务、日志
2),构造代理类和代理实例,传入所需参数。调用方法。

说明:若method.invoke(proxy,args);会出现java.lang.StackOverFlowError错误,

2、cglib动态代理
cglib是子类代理,cglib性能要比jdk好,但创建代理对象时,jdk比cglib效率高,
net.sf.cglib.proxy.MethodInterceptor
net.sf.cglib.proxy.MethodProxy
net.sf.cglib.proxy.Enhancer

0
1
分享到:
评论

相关推荐

    简单实现Cglib子类代理

    Cglib子类代理是Java动态代理的一种实现方式,它主要通过字节码技术在运行时动态创建一个目标对象的子类,以此来实现代理功能。Cglib是一个强大的高性能的代码生成库,它在许多AOP(面向切面编程)框架中被广泛应用...

    Spring框架中JDK动态代理和cglib动态代理

    JDK 动态代理是 Java 自带的动态代理机制,它只能代理接口,而不能代理类。这是因为 JDK 动态代理是基于接口的代理,它需要一个接口来生成代理类。如果我们想使用 JDK 动态代理,必须提供一个接口,并且将其实现类...

    java代理机制 JDK动态代理和cglib代理 详解

    JDK动态代理基于接口实现,它要求被代理的类必须实现至少一个接口。在运行时,Java会动态地创建一个新的类,这个类实现了与原始类相同的接口,并且在调用接口方法时,可以插入自定义的逻辑。这样,我们就可以在不...

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

    相反,CGLIB(Code Generation Library)是一种字节码生成库,它可以创建一个目标类的子类并覆盖其方法,以此实现动态代理。CGLIB使用ASM库来操作字节码,因此它不需要目标类实现任何接口,这使得它能应用于没有接口...

    java 动态代理实例(JDK代理与CGLIB代理)

    **CGLIB代理**则是在运行时动态地生成字节码来创建目标对象的子类,因此它适用于没有接口的目标对象。CGLIB库是Spring框架默认使用的代理方式之一。使用CGLIB代理的基本步骤: 1. **引入CGLIB库**:在项目中添加...

    java中的三种代理模式

    CGLIB通过字节码技术动态生成目标类的子类,并在子类中拦截方法调用,从而实现代理。CGLIB代理比JDK动态代理稍微快一些,因为它不需要接口,而是直接对类进行操作。但是,由于涉及到字节码生成,其代码比JDK代理复杂...

    JDK代理和Cglib代理

    3. 性能:通常情况下,Cglib的性能优于JDK代理,因为生成子类比创建接口代理更快。 4. 灵活性:Cglib由于不依赖于接口,因此在对象模型设计上更自由。 5. 兼容性:JDK代理是Java标准库的一部分,而Cglib是第三方库,...

    Java 动态代理和Cglib代理(二)

    首先,Java的动态代理基于Java的反射API实现,主要用于接口代理。当目标对象实现了至少一个接口时,我们可以使用`java.lang.reflect.Proxy`类来创建代理对象。这个代理对象会拦截调用并执行自定义逻辑。例如,在调用...

    java三种方法实现代理模式(源码+jar包)

    CGLIB通过字节码技术动态创建子类来实现代理,因此即使目标类没有接口也能进行代理。然而,由于涉及到字节码生成,其性能相对较低,但灵活性更高。 在Spring框架中,代理模式的应用尤为常见,如AOP(Aspect ...

    动态代理和cglib例子

    而CGLIB(Code Generation Library)则是一个强大的Java字节码操纵框架,常用于创建子类代理,当目标对象无法实现接口时,CGLIB就会派上用场。 一、动态代理 动态代理主要基于Java的反射API和InvocationHandler...

    Jdk动态代理和cglib动态代理原理

    - **CGLIB代理**适用于目标类没有接口或者不希望修改原有接口的情况,其性能通常优于JDK代理,因为它是基于字节码生成的子类,而JDK代理需要反射调用接口方法。 在实际开发中,如Spring AOP框架就同时支持JDK和...

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

    CGLIB库可以生成一个目标类的子类,从而实现对非接口类的代理。它通过ASM库来操作字节码生成代理类,同样可以拦截方法调用,实现类似的功能。 **日志功能**: 在动态代理中,日志功能通常是通过在`invoke()`方法内...

    Spring AOP的静态代理和动态代理,转移到调用处理器一个集中的方法中处理.docx

    - **CGLIB动态代理**:当被代理的类没有实现任何接口时,可以使用CGLIB库生成子类来实现代理。CGLIB会通过字节码技术动态生成一个目标类的子类,并覆盖其方法来实现代理。相比JDK动态代理,CGLIB的性能通常更好,但...

    代理设计模式:静态代理和动态代理的理解、实现与区别(优缺点)与SpringAOP的3种配置方式案例工程代码

    CGLIB会在运行时动态生成一个子类来实现代理。 ### Spring AOP的3种配置方式 1. **XML配置**:在Spring的配置文件中声明切面、通知、目标对象等,这是最传统的配置方式。 2. **注解配置**:使用`@Aspect`注解定义切...

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

    首先,JDK代理,也称为接口代理,是Java内置的一种动态代理机制。通过实现`java.lang.reflect.InvocationHandler`接口并调用`java.lang.reflect.Proxy`类的静态方法`newProxyInstance()`,我们可以创建一个代理对象...

    代理模式(含动态代理讲解)【Spring AOP实质】

    CGLIB则是通过继承目标类的方式创建代理对象,如果目标类没有定义接口,CGLIB会生成一个子类并在子类的方法中加入切面逻辑。 总结来说,代理模式是一种强大的设计模式,它可以帮助我们解耦系统,提供额外的功能,...

    spring+动态代理

    CGLIB是一个强大的代码生成库,它可以为一个类创建子类并重写其方法,从而实现动态代理。 - CGLIB代理比JDK代理更灵活,因为它不需要目标对象实现接口。然而,由于需要生成字节码,它在性能上可能稍逊一筹。 在...

    在spring中获取代理对象代理的目标对象工具类

    2. **CGLIB代理**:当目标对象没有实现接口时,Spring会使用CGLIB库来创建代理对象,这种方式会生成一个目标类的子类。 ### 自定义工具类:AopTargetUtils 为了方便地获取代理对象背后的目标对象,我们可以创建一...

    jdk与cglib动态度代理的区别原理

    类加载器用于生成代理类,接口数组定义了代理对象需要实现的接口,`InvocationHandler`则处理对代理对象的所有方法调用。 2. **过程**:当通过代理对象调用某个方法时,实际执行的是`InvocationHandler.invoke()`...

    接口+抽象类+代理的简单例子

    在这个例子中,`Circle`和`Rectangle`是子类,`Drawable`是抽象类,`Shape`是接口,而`ProxyShape`是代理。通过这个简单的例子,我们可以看到这些概念如何协同工作,提供了一个灵活且可扩展的图形绘制系统。 总结来...

Global site tag (gtag.js) - Google Analytics