`

java 基于cglib动态代理

 
阅读更多
注意被代理的类不能是final类型的。
import java.lang.reflect.Method;

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

import org.junit.Test;

/**
 * @author xxx
 * @createDate 2014-5-31上午10:59:01
 * @className CglibProxy.java
 * @useFor cglib基于类的代理
 */
public class CglibProxy {

	@Test
	public void cglibProxy()
	{
		RealProxy realProxy = new RealProxy();
		RealClass realClass = (RealClass)realProxy.getInstance(new RealClass()) ;
		realClass.doSomething() ;
	}
}

class RealClass
{
	public void doSomething()
	{
		System.out.println("端午节");
	}
};

  
  
/**
 *  
 * @author lanweixing
 * @createDate 2014-5-31上午11:01:42
 * @className CglibProxy.java
 * @useFor  
 */

class RealProxy implements MethodInterceptor  
{  
    /** 
     * 代理类
     */  
    private Object target;  
      
    public Object getInstance(Object target)  
    {  
        this.target = target;  
        Enhancer en = new Enhancer();  
        en.setSuperclass(target.getClass());  
        en.setCallback(this);  
        return en.create();  
    }  
      
    @Override  
    public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy)  
        throws Throwable  
    {  
        System.out.println("Before Advice");  
        Object result = proxy.invoke(target, args);  
        System.out.println("After Advice");  
        return result;  
    }  
  
}  

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

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

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

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

    CGLIB 动态代理是基于类的代理, 它可以代理类和接口。CGLIB 动态代理使用 ASM 字节码工具来生成代理类。CGLIB 动态代理可以代理没有接口的类,這是因为 CGLIB 动态代理可以生成一个原类的子类,然后 override 原类...

    cglib动态代理介绍

    在Java中,JDK自带的动态代理机制是基于接口的,如果被代理的类没有实现任何接口,那么就无法使用JDK的动态代理。而CGlib则弥补了这一不足,它通过字节码技术生成目标类的子类,然后在子类中拦截父类方法的调用,...

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

    JDK动态代理基于Java的反射API实现,适用于接口代理。当目标对象实现了至少一个接口时,Spring会创建一个代理对象,这个代理对象实现了与目标对象相同的接口,并在调用接口方法时插入额外的切面逻辑。代理对象在运行...

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

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

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

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

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

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

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

    以下是一个简单的CGLIB代理示例: ```java import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; import java.lang.reflect.Method; ...

    cglib动态代理jar包

    CGlib动态代理是Java开发中一个非常重要的工具库,它主要用来实现代理模式,尤其在面向切面编程(AOP)中发挥着关键作用。CGlib是一个强大的高性能的代码生成库,它可以在运行期扩展Java类与实现Java接口。CGlib并不...

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

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

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

    - 如果目标类中包含静态方法,CGlib代理不会影响静态方法的行为。 总结,CGlib是一个强大且灵活的工具,它通过字节码生成技术实现了对Java类的动态代理,尤其在没有接口约束或者性能要求高的情况下,它是Java开发者...

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

    本文将深入探讨两种主要的Java代理实现:JDK动态代理和CGLIB代理。 一、JDK动态代理 JDK动态代理基于接口实现,它要求被代理的类必须实现至少一个接口。在运行时,Java会动态地创建一个新的类,这个类实现了与原始...

    Java动态代理CGlib Jar包

    CGLIB是一个强大的、高性能的代码生成库。它被广泛使用在基于代理的AOP框架(例如Spring AOP和...EasyMock和jMock作为流行的Java测试库,它们提供Mock对象的方式来支持测试,都使用了CGLIB来对没有接口的类进行代理。

    cglib动态代理

    JDK提供了一种基于接口的动态代理机制,但当被代理类没有实现接口时,CGLib则提供了一种基于类的解决方案。 2. **CGLib库**:CGLib全称Code Generation Library,是一个强大的高性能的代码生成库,主要用于在运行期...

    JAVA动态代理实现Demo(JDK动态代理和CGLIB动态代理)

    Java提供了两种主要的动态代理实现方式:JDK动态代理和CGLIB动态代理。 **JDK动态代理**: JDK动态代理基于接口实现,也就是说,被代理的对象必须实现至少一个接口。代理机制的核心是`java.lang.reflect.Proxy`类和...

    CGlib动态代理类的jar包

    CGlib是Java动态代理的一种实现方式,它不是依赖于Java的反射机制,而是通过生成目标类的子类来实现代理,因此在性能上通常优于基于接口的JDK动态代理。 CGlib动态代理的核心类包括`Enhancer`、`Callback`和`...

    java(cglib)动态代理样例

    CGlib(Code Generation Library)是Java中实现动态代理的一种常见方式,特别是在Java代理接口不适用或者目标类没有实现任何接口的情况下。 动态代理的主要应用场景包括日志记录、性能监控、事务管理、权限控制等。...

    cglib动态代理相关包

    CGlib动态代理基于ASM库来操作Java字节码,当目标对象没有实现接口时,CGlib可以创建目标对象的子类,并在子类中拦截方法调用。它通过生成的子类重写父类的方法,在被重写的方法内部添加额外的处理逻辑,如日志记录...

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

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

    CgLib动态代理所需的jar

    当目标类没有实现接口时,Java的标准动态代理机制JDK Proxy就无法工作,因为JDK Proxy是基于接口的。而CgLib则通过生成目标类的子类来实现动态代理,即使目标类没有接口,也可以进行代理。这使得CgLib在AOP(面向切...

Global site tag (gtag.js) - Google Analytics