`

java代理技术二(Cglib实现)

阅读更多

由于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代理(二)

    在Java编程领域,动态代理和Cglib代理是两种常用的技术,用于在运行时创建对象的代理,以实现额外的功能,如AOP(面向切面编程)中的日志、事务管理等。本篇文章将深入探讨这两种代理机制,尤其是Cglib代理。 首先...

    Java动态代理详解; CGLib实现动态代理1

    CGLib 使用字节码技术创建代理类,它比基于接口的 Java 动态代理更加灵活,因为可以代理任何非 final 类。 以下是使用 CGLib 创建动态代理的基本步骤: 1. 引入 CGLib 库。 2. 创建一个 `Enhancer` 对象,它是 ...

    Java JDK代理、CGLIB、AspectJ代理分析比较

    ### Java代理技术详解:JDK代理、CGLIB与AspectJ #### 一、代理模式简介 代理模式是一种常见的设计模式,在《Design Patterns in Java》一书中对其有明确的定义:“代理模式为一个对象提供一个代理,以控制对该...

    java动态代理和cglib动态代理示例分享共5页.pdf

    Java动态代理和CGLIB动态代理是两种在Java开发中常用的面向切面编程(AOP)技术,主要用于在运行时创建具有额外功能的对象。这两者都允许我们在不修改原有代码的情况下,为对象添加额外的行为,如日志记录、事务管理...

    示例代码:java动态代理和cglib代理的简单例子

    Java动态代理和CGLIB代理是两种常用的在Java中实现面向切面编程(AOP)的技术,它们允许我们在不修改原有代码的情况下,为方法添加额外的功能,如日志记录、性能监控、事务管理等。本篇文章将深入探讨这两种代理机制...

    cglib动态生成java类

    3. **广泛支持**:许多知名框架如Spring AOP、Hibernate等都使用了CGLib作为底层的动态代理技术。 ### 应用场景 1. **AOP**:在面向切面编程中,CGLib常用来创建切面的代理对象,实现在不修改源代码的情况下,插入...

    JAVA JDK静态代理、动态代理、CGlib代理的代码演示

    下面我们将详细探讨这些代理技术,并通过代码演示来理解它们的工作原理。 ### 1. JDK静态代理 静态代理是我们在编译时就已经知道代理类和目标类的关系。我们需要创建一个代理类,该类继承自目标接口,并实现其所有...

    Java动态代理(JDK和cglib)

    在Java中,代理模式的应用非常广泛,特别是在框架级开发中,例如AOP(面向切面编程)中的通知(Advice)、事务管理等方面都离不开代理技术的支持。根据代理对象创建的时间不同,代理又可分为静态代理和动态代理两种...

    动态代理和cglib例子

    总结,动态代理和CGLIB都是Java中实现AOP的关键技术,它们提供了在不修改源码的情况下扩展和增强已有功能的能力。根据实际需求,我们可以灵活选择适合的代理方式。在学习和应用这些技术时,理解其原理和使用场景至关...

    jdk与cglib动态代理与底层实现

    在Spring中,AOP模块利用这两种代理技术实现切面编程。默认情况下,如果目标类实现了接口,Spring会选择JDK动态代理;如果没有,它会转向CGLIB。Spring的`DefaultAdvisorAutoProxyCreator`会根据配置的Advisor自动...

    Java动态代理Proxy和cglib

    - **性能**:在不考虑接口的情况下,CGLIB通常比Java的动态代理更快,因为它采用的是子类化而非接口实现。 - **灵活性**:CGLIB允许对非接口类进行代理,提供了更大的灵活性。 ### 4. 应用场景 - AOP:动态代理和...

    cglib实现动态代理依赖jar包

    总结来说,"cglib实现动态代理依赖jar包"中的asm-5.1.jar和cglib-3.2.4.jar是实现Java动态代理的重要工具,它们通过字节码技术实现了对类的无侵入式扩展和控制,是很多Java企业级框架的核心组成部分。

    java动态代理实例(jdk动态代理和cglib)

    本篇将深入探讨两种主要的Java动态代理技术:JDK动态代理和CGLIB。 首先,我们来了解一下JDK动态代理。JDK动态代理基于Java反射API实现,主要用于接口代理。以下是一个简单的JDK动态代理的使用步骤: 1. **定义...

    cglib动态代理

    CGLib动态代理是一种在Java编程中实现动态代理的技术,它主要通过字节码操作库ASM来生成目标类的子类,从而实现对目标类的方法拦截和增强。在Java中,当我们需要在运行时动态地创建对象并扩展其功能时,CGLib是一个...

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

    Java中的动态代理是一种重要的设计模式...总结来说,JDK动态代理和CGLIB动态代理都是为了在运行时提供对目标对象的增强,它们通过不同的实现方式提供了扩展功能的可能性,开发者可以根据项目需求和场景选择合适的技术。

    基于MAVEN项目的CGLib动态代理原理及实现

    CGLib(Code Generation Library)是Java中一个高性能的代码生成库,它在运行期通过字节码技术为类创建子类,以此实现动态代理。 1. Maven项目配置 首先,我们需要在Maven项目的`pom.xml`文件中添加CGLib的依赖。在...

    java动态代理(JDK和cglib).pdf

    Java 动态代理是Java语言中的一个重要特性,它允许我们在运行时动态地创建代理对象,以实现对目标对象的功能扩展。...了解和熟练使用这两种动态代理技术,可以极大地提升Java开发的效率和代码质量。

    cglib和asm

    CGlib和ASM是Java开发中两个非常重要的库,主要用于字节码操作和动态代理。这两个库在Java生态系统中扮演着不可或缺的角色,特别是在AOP(面向切面编程)和ORM(对象关系映射)框架中。 CGlib是一个强大的、高性能...

    CGLib字节码增强实现代理原理(附源码下载)

    例如,可以利用CGLib实现事务管理,当检测到特定的注解时,自动开启和提交事务。 源码分析是深入理解CGLib工作原理的关键。通过下载并阅读源码,我们可以看到如何构建Enhancer对象,设置回调,并生成代理类的详细...

Global site tag (gtag.js) - Google Analytics