由于jdk默认实现只能对接口进行代理,对普通类就不行了。所以Cglib正是为了弥补这种不足开发的。原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强。因为采用的是继承,所以不能对final修饰的类进行代理。
采用上一篇类似的代码:
一个普通类(未明确指明实现接口)
public class DoSomethingImpl2 { public void doA() { System.out.println("I'm DoSomethingImpl2..."); } }
完成一个cglib代理类
import java.lang.reflect.Method; import net.sf.cglib.proxy.*; public class DoSomethingCglib implements MethodInterceptor{ private Object target; public Object getInstance(Object target){ this.target=target; Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(target.getClass()); enhancer.setCallback(this); return enhancer.create(); } @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { Object result; System.out.println("Cglib代理准备..."); result=proxy.invokeSuper(obj, args); System.out.println("Cglib代理完成..."); return result; } }
一个测试类
public class TestProxy { public static void main(String[] args){ DoSomethingCglib dscg=new DoSomethingCglib(); DoSomethingImpl2 dsi2CgProxy=(DoSomethingImpl2)dscg.getInstance(new DoSomethingImpl2()); dsi2CgProxy.doA(); } }
文章来源:http://www.itnose.net/detail/6023558.html
更多文章:http://www.itnose.net/type/1.html
相关推荐
在Java编程领域,动态代理和Cglib代理是两种常用的技术,用于在运行时创建对象的代理,以实现额外的功能,如AOP(面向切面编程)中的日志、事务管理等。本篇文章将深入探讨这两种代理机制,尤其是Cglib代理。 首先...
CGLib 使用字节码技术创建代理类,它比基于接口的 Java 动态代理更加灵活,因为可以代理任何非 final 类。 以下是使用 CGLib 创建动态代理的基本步骤: 1. 引入 CGLib 库。 2. 创建一个 `Enhancer` 对象,它是 ...
### Java代理技术详解:JDK代理、CGLIB与AspectJ #### 一、代理模式简介 代理模式是一种常见的设计模式,在《Design Patterns in Java》一书中对其有明确的定义:“代理模式为一个对象提供一个代理,以控制对该...
Java动态代理和CGLIB动态代理是两种在Java开发中常用的面向切面编程(AOP)技术,主要用于在运行时创建具有额外功能的对象。这两者都允许我们在不修改原有代码的情况下,为对象添加额外的行为,如日志记录、事务管理...
Java动态代理和CGLIB代理是两种常用的在Java中实现面向切面编程(AOP)的技术,它们允许我们在不修改原有代码的情况下,为方法添加额外的功能,如日志记录、性能监控、事务管理等。本篇文章将深入探讨这两种代理机制...
3. **广泛支持**:许多知名框架如Spring AOP、Hibernate等都使用了CGLib作为底层的动态代理技术。 ### 应用场景 1. **AOP**:在面向切面编程中,CGLib常用来创建切面的代理对象,实现在不修改源代码的情况下,插入...
下面我们将详细探讨这些代理技术,并通过代码演示来理解它们的工作原理。 ### 1. JDK静态代理 静态代理是我们在编译时就已经知道代理类和目标类的关系。我们需要创建一个代理类,该类继承自目标接口,并实现其所有...
在Java中,代理模式的应用非常广泛,特别是在框架级开发中,例如AOP(面向切面编程)中的通知(Advice)、事务管理等方面都离不开代理技术的支持。根据代理对象创建的时间不同,代理又可分为静态代理和动态代理两种...
总结,动态代理和CGLIB都是Java中实现AOP的关键技术,它们提供了在不修改源码的情况下扩展和增强已有功能的能力。根据实际需求,我们可以灵活选择适合的代理方式。在学习和应用这些技术时,理解其原理和使用场景至关...
在Spring中,AOP模块利用这两种代理技术实现切面编程。默认情况下,如果目标类实现了接口,Spring会选择JDK动态代理;如果没有,它会转向CGLIB。Spring的`DefaultAdvisorAutoProxyCreator`会根据配置的Advisor自动...
- **性能**:在不考虑接口的情况下,CGLIB通常比Java的动态代理更快,因为它采用的是子类化而非接口实现。 - **灵活性**:CGLIB允许对非接口类进行代理,提供了更大的灵活性。 ### 4. 应用场景 - AOP:动态代理和...
总结来说,"cglib实现动态代理依赖jar包"中的asm-5.1.jar和cglib-3.2.4.jar是实现Java动态代理的重要工具,它们通过字节码技术实现了对类的无侵入式扩展和控制,是很多Java企业级框架的核心组成部分。
本篇将深入探讨两种主要的Java动态代理技术:JDK动态代理和CGLIB。 首先,我们来了解一下JDK动态代理。JDK动态代理基于Java反射API实现,主要用于接口代理。以下是一个简单的JDK动态代理的使用步骤: 1. **定义...
CGLib动态代理是一种在Java编程中实现动态代理的技术,它主要通过字节码操作库ASM来生成目标类的子类,从而实现对目标类的方法拦截和增强。在Java中,当我们需要在运行时动态地创建对象并扩展其功能时,CGLib是一个...
Java中的动态代理是一种重要的设计模式...总结来说,JDK动态代理和CGLIB动态代理都是为了在运行时提供对目标对象的增强,它们通过不同的实现方式提供了扩展功能的可能性,开发者可以根据项目需求和场景选择合适的技术。
CGLib(Code Generation Library)是Java中一个高性能的代码生成库,它在运行期通过字节码技术为类创建子类,以此实现动态代理。 1. Maven项目配置 首先,我们需要在Maven项目的`pom.xml`文件中添加CGLib的依赖。在...
Java 动态代理是Java语言中的一个重要特性,它允许我们在运行时动态地创建代理对象,以实现对目标对象的功能扩展。...了解和熟练使用这两种动态代理技术,可以极大地提升Java开发的效率和代码质量。
CGlib和ASM是Java开发中两个非常重要的库,主要用于字节码操作和动态代理。这两个库在Java生态系统中扮演着不可或缺的角色,特别是在AOP(面向切面编程)和ORM(对象关系映射)框架中。 CGlib是一个强大的、高性能...
例如,可以利用CGLib实现事务管理,当检测到特定的注解时,自动开启和提交事务。 源码分析是深入理解CGLib工作原理的关键。通过下载并阅读源码,我们可以看到如何构建Enhancer对象,设置回调,并生成代理类的详细...