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

Cglib实现动态代理

阅读更多

java的动态代理只能对接口进行代理,如果一个类没有实现任何接口,则需要使用Cglib的动态代理技术,

 

cglib的一种实现简单地讲就是一句话:为代理类创建一个子类,并拦截这个子类对父类方法的调用。

 

这么说比较抽象,下面三个简单的类实现了cglib的动态代理

 

入口类:

TestCglibMain.java

 

package cn.java.cglibproxy;

public class TestCglibMain {

	public static void main(String[] args) {
		
		//初始化代理类
		CglibProxy proxy  =  new CglibProxy();
		//创建代理子类
		TestCglib test = (TestCglib)proxy.getProxy(TestCglib.class);
		//调用父类方法
		test.pringSomthing();
		
	}

}

 

被代理类:

TestCglib.java

 

package cn.java.cglibproxy;

public class TestCglib {

	public void pringSomthing(){
		System.out.println("printSomthing is now!!!");
	}
}

 

cglib代理实现类:

CglibProxy.java

 

package cn.java.cglibproxy;

import java.lang.reflect.Method;

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

public class CglibProxy implements MethodInterceptor {

	private Enhancer enhancer = new Enhancer();
	
	public Object getProxy(Class<TestCglib> clazz){
		
		enhancer.setSuperclass(clazz);
		enhancer.setCallback(this);
		
		return enhancer.create();
	}
	
	
	public Object intercept(Object obj, Method method, Object[] arg2,
			MethodProxy proxy) throws Throwable {
		
		System.out.println("打印前");
		
		Object result = proxy.invokeSuper(obj, arg2);
		
		
		System.out.println("打印后");
		
		return result;
	}

}

 

 

执行入口程序,打印结果:

打印前
printSomthing is now!!!
打印后

 

 

 

分享到:
评论

相关推荐

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

    以下是使用CGlib实现动态代理的关键步骤: 1. 引入依赖:在项目中,需要引入CGlib的相关库,通常是在Maven或Gradle的配置文件中添加对应的依赖。 2. 创建Enhancer对象:Enhancer是CGlib的核心类,它提供了创建代理...

    cglib实现动态代理依赖jar包

    这个“cglib实现动态代理依赖jar包”包含了两个核心的JAR文件:asm-5.1.jar和cglib-3.2.4.jar。 **ASM库**: ASM是一个字节码操控和分析框架,它可以直接生成和修改Java类和Android Dalvik字节码。ASM库主要用在...

    java常用设计模式及JDK与CGLIB实现动态代理区别(源码)

    java常用设计模式及JDK与CGLIB实现动态代理区别(源码) /** * 使用cglib动态代理 * @author * */ public class BookFacadeProxy implements MethodInterceptor{ private Object target; @Override public...

    jdk和cglib实现动态代理

    分别使用jdk和cglib实现动态代理,包含UML图。还有相关的博客链接:http://blog.csdn.net/y_love_f/article/details/46345581.博客中有具体的代理解释

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

    总结起来,Java 动态代理和 CGLib 是 Java 中实现代理模式的重要工具。动态代理提供了在运行时动态创建代理对象的能力,而 CGLib 使得代理机制可以应用于没有接口的类,提高了代码的灵活性和可扩展性。通过代理模式...

    Spring如何基于Proxy及cglib实现动态代理

    总的来说,Spring中的动态代理是通过Java Proxy或cglib来实现的,它们都提供了一种在不修改原有代码的情况下,对方法调用进行拦截和扩展的机制。Java Proxy适用于目标对象实现了接口的情况,而cglib则适用于没有接口...

    转载:cglib动态代理介绍(一)

    ### CGlib实现动态代理 1. **创建Enhancer对象**:Enhancer是CGlib的核心类,用于创建代理对象。我们可以通过调用`Enhancer.create()`方法来生成代理对象。 ```java Enhancer enhancer = new Enhancer(); enhancer....

    cglib动态代理

    以下是一个具体的例子,展示了如何使用cglib实现动态代理: 1. **原始类定义**: - `InfoManager`类包含了对信息的基本操作,包括创建(create)、更新(update)、删除(delete)和查询(query)等方法。 ```java ...

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

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

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

    在Java开发中,动态代理和CGLIB代理是两种常见的面向切面编程(AOP)实现方式,它们都用于在不修改原有代码的情况下,增强或扩展对象的功能。本篇文章将深入探讨JDK动态代理和CGLIB代理的区别,以及它们在实际应用中...

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

    JDK和CGLIB是Java中实现动态代理的两种主要方式,它们在Spring框架中扮演着关键角色,尤其是在AOP(面向切面编程)中。 1. **JDK动态代理**: JDK动态代理基于Java的接口机制实现,因此,要使用JDK动态代理,被...

    cglib及其依赖包

    2. 设置回调函数,即MethodInterceptor,这是CGLib实现动态代理的关键,它定义了当代理对象调用方法时执行的逻辑。 3. 调用Enhancer的create()方法,生成代理对象。 在Spring AOP中,CGLib通过Enhancer和...

    cglib的动态代理需要的包

    它在许多场景下被广泛使用,特别是在实现Java的动态代理机制时。动态代理是一种技术,允许我们在运行时创建一个对象的代理,这个代理对象能够拦截并处理对原对象的调用。CGlib就是为这种需求提供支持的一个库。 ...

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

    CGLIB 动态代理可以代理没有接口的类,這是因为 CGLIB 动态代理可以生成一个原类的子类,然后 override 原类的方法来实现代理。 在 Spring AOP 框架中,默认情况下,Spring 会选择使用 JDK 动态代理,但是如果目标...

    AOP之JDK动态代理和CGLib动态代理

    CGLib通过生成目标对象的子类来实现代理,它会动态地创建一个新的类,这个类继承自目标类,并覆盖其方法以插入切面逻辑。CGLib的优点是它可以代理任何类,无需目标对象实现接口,但相比JDK动态代理,它的运行效率较...

    cglib动态代理介绍

    CGlib则是Java动态代理的一种实现方式,尤其是在不提供接口的情况下,它通过生成目标类的子类来实现动态代理。 在Java中,JDK自带的动态代理机制是基于接口的,如果被代理的类没有实现任何接口,那么就无法使用JDK...

    使用cglib演示动态代理时用到的jar包 aop 动态代理

    动态代理是实现AOP的一种方式,而在Java中,CGLIB(Code Generation Library)是一个常用的库,专门用于创建子类动态代理。下面我们将详细探讨AOP、动态代理以及CGLIB的相关知识点。 首先,AOP的核心概念是“切面”...

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

    本文将深入探讨如何在基于Maven的项目中利用CGLib库实现动态代理。CGLib(Code Generation Library)是Java中一个高性能的代码生成库,它在运行期通过字节码技术为类创建子类,以此实现动态代理。 1. Maven项目配置...

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

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

    JDK和CGlib分别实现的动态代理源代码

    JDK和CGlib是两种常用的动态代理实现方式,它们各自有不同的特性和使用场景。 首先,我们来详细了解一下JDK动态代理。JDK动态代理基于接口实现,它要求被代理的对象必须实现至少一个接口。通过`java.lang.reflect....

Global site tag (gtag.js) - Google Analytics