`

使用CGLIB的代理技术

阅读更多
import java.lang.reflect.Method;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

/**
 * 使用CGLIB创建代理对象工厂
 * 
 * @author 张明学
 */
public class CGLIBProxyFactory {
	/**
	 * 使用CGLIB创建代理对象(实际是目标对象的子类,覆盖了父类对象的方法)
	 * 
	 * @param target
	 *            目标对象
	 * @return
	 */
	public static Object createProxyIntance(final Object target) {
		Object proxy = null;
		Enhancer enhancer = new Enhancer();
		// 设置父类为目标对象
		enhancer.setSuperclass(target.getClass());
		enhancer.setCallback(new MethodInterceptor() {
			// arg0表示代理对象本身
			// arg1执行的方法(拦截的方法)
			// arg2方法的参数
			// arg3方法的代理对象
			public Object intercept(Object arg0, Method arg1, Object[] arg2,
					MethodProxy arg3) throws Throwable {
				System.out.println("执行的方法" + arg1.getName());
				Object result = arg3.invoke(target, arg2);
				return result;
			}
		});
		proxy = enhancer.create();
		return proxy;
	}
}

 测试:

public class StudentDao {
	
	public void save() {
		System.out.println("com.mengya.dao.StudentDao的save方法");
	}
	
}

 

public class CGLIBProxyTest {
	public static void main(String[] args) {
		StudentDao stuDao = (StudentDao) CGLIBProxyFactory.createProxyIntance(new StudentDao());
		stuDao.save();
	}
}

 

分享到:
评论

相关推荐

    cglib代理模式要使用的相关jar包

    以上就是CGLIB代理模式的基本原理和使用方法。CGLIB的动态代理在很多场景下都非常实用,例如在AOP框架中拦截方法执行,进行日志记录、性能监控、事务管理等。然而,由于CGLIB是基于继承的,所以如果目标类为final...

    CGLib代理jar包

    使用CGLib代理的基本步骤如下: 1. 引入依赖:首先,你需要将这两个jar包引入到你的项目中,无论是Maven、Gradle还是传统的类路径管理方式。 2. 创建Enhancer对象:CGLib的代理功能主要通过Enhancer类来实现。...

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

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

    CGLib代理模式用到的jar包

    CGLib代理主要分为两种类型:接口代理和类代理。对于实现了接口的类,CGLib可以像JDK的动态代理一样工作,但如果目标类没有实现任何接口,CGLib则可以通过生成目标类的子类来实现动态代理。CGLib的核心类包括...

    cglib代理jar包

    了解和掌握CGlib代理技术,能够极大地提升我们的代码复用性和可维护性,特别是在构建复杂的企业级应用时,CGlib代理能够帮助我们更好地实现面向切面的编程。 总的来说,`cloud-cglib.jar`这个压缩包中的CGlib库为...

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

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

    cglib创建代理类.rar

    springAOP等框架中,大量用到代理技术; 两类代理技术: 1,java动态代理,见JDK文档或相关java书; 2.cglib创建代理类,比第一种更加简单,代理类和背代理类不需要实现共同接口。本例子就是cglib代理的例子,很简单

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

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

    简单实现Cglib子类代理

    下面我们将详细讲解Cglib代理的工作原理以及如何在实际项目中使用。 1. **Cglib代理原理**: - Cglib通过ASM库动态生成一个子类,这个子类继承自目标类,并重写其中的方法。 - 在生成的子类中,每个被代理的方法...

    动态代理和cglib例子

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

    cglib的动态代理需要的包

    CGlib在Spring AOP、Hibernate等流行框架中也有广泛的应用,例如Spring AOP在没有接口的情况下默认使用CGlib来实现对类的代理,以便进行切面编程。 总的来说,CGlib是一个强大的工具,可以让我们在运行时动态生成和...

    输出JDK和CGLib动态代理产生的class文件.zip

    2. CGLib代理项目: - src/main/java:包含目标类 - target/classes:编译后的class文件,包括目标类的class文件,以及由CGLib生成的子类class文件 - 测试代码:展示如何使用Enhancer创建代理对象并调用方法 这...

    cglib动态代理介绍

    **正文** CGlib是Java开发中一个非常重要的库,它是一个强大的、高性能的代码生成库,主要用于创建子类,...同时,对于熟悉Spring AOP的朋友,要知道Spring在没有接口的情况下,内部就是使用CGlib来实现AOP代理的。

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

    接下来将详细介绍三种常用的Java代理技术:JDK代理、CGLIB代理以及AspectJ代理,并对比它们各自的优缺点。 #### 二、静态代理实例 静态代理可以通过下面的例子进行说明: ```java public interface Calculator { ...

    CGlib动态代理类的jar包

    使用CGlib动态代理的一般步骤如下: 1. 引入相关依赖:在项目中引入上述jar包。 2. 创建Enhancer对象:`Enhancer enhancer = new Enhancer();` 3. 设置被代理的目标类:`enhancer.setSuperclass(MyTargetClass.class...

    Spring aop 基于schema的AOP支持及JoinPoint的使用、如何使用CGLIB代理

    **Spring AOP 基于Schema的...CGLIB作为Spring AOP的底层代理技术,为我们提供了对未实现接口类的代理能力,使得AOP的应用场景更加广泛。理解并熟练掌握这些概念和技术,对于构建可维护、高性能的Spring应用至关重要。

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

    - **CGLIB代理**:CGLIB通过ASM生成一个继承自目标类的新类,这个新类覆盖了目标类的所有方法,并在这些方法内部调用拦截器链。在运行时,这个新类的实例作为代理对象。 5. **优缺点**: - JDK代理简单易用,但...

    CGLIB动态代理+CGLIB动态代理完整代码

    我们最终是通过一个代理对象去调用方法的,那我们就要获取一个代理对象,cglib代理,是通过Enhancer这个类里面对应的一个create()方法,去生成一个代理对象的。 Enhancer创建一个被代理对象的子类并且拦截所有的方法...

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

    主要存在两种常见的动态代理技术:JDK动态代理和CGLIB(Code Generation Library)动态代理。本文将深入探讨这两种技术的区别和原理。 **JDK动态代理**: JDK动态代理是Java标准库提供的一种代理机制,位于`java....

Global site tag (gtag.js) - Google Analytics