`

动态代理 [用cglib实现]

阅读更多

 一. 用cglib 实现java 的動態代理    

      用cglib 實現的動態代理,被代理的目标是一个普通的类,并不像jdk动态代理那样必須實現一個接口才可以.其實現主是通過net.sf.cglib.proxy.MethodInterceptor接口,即可完成对目标对象的代理;  

 

二. 首先在classpath下導入動態代理所依賴的jar包:cglib-nodep-2.1_3.jar(見附件)

     

 

二. 本章用'售票點代理車站售票'的示例來演示如何用cglib来實現对java的動態代理.完整代碼如下:  

 

1.  被代理目標类

package structuralPattern.proxy.cglib;
/**
 * @ClassName: TrainStation 
 * @Description:目标代理类
 * @author Liyongbin
 * @date 2011-2-9 上午09:59:37 
 * @version V1.0
 */
public class TrainStation {
	public void saleTicet(){
		System.out.println("卖火车票");
	}
}

 

 

2. 動態代理类

package structuralPattern.proxy.cglib;

import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
/**
 * @ClassName: DynamicProxy_cglib 
 * @Description:動態代理类
 * @author Liyongbin
 * @date 2011-2-9 上午10:21:33 
 * @version V1.0
 */
public class DynamicProxy_cglib implements MethodInterceptor {

	private Object target;

	public Object getProxy(Object targetObject) {
		this.target = targetObject;
		Enhancer proxy = new Enhancer();
		proxy.setSuperclass(target.getClass());
		proxy.setCallback(this);
		return proxy.create();
	}

	@Override
	public Object intercept(Object proxyObject, Method proxyMethod,
			Object[] paramArray, MethodProxy methodsProxy) throws Throwable {
		deliverTicket();
		Object proxy = proxyMethod.invoke(target, paramArray);
		discountTicket();
		return proxy;
	}

	// "代理"自己的方法1
	public void deliverTicket() {
		System.out.println("送票上門服務");
	}

	// "代理"自己的方法2
	public void discountTicket() {
		System.out.println("買票打折服務");
	}
}

 

3. 測試動態代理

package structuralPattern.proxy.cglib;
/**
 * @ClassName: DynamicProxyTest 
 * @Description:測試動態代理
 * @author Liyongbin
 * @date 2011-2-9 上午09:59:15 
 * @version V1.0
 */
public class DynamicProxyTest {
  public static void main(String[] args) {
   DynamicProxy_cglib proxy = new DynamicProxy_cglib();
   TrainStation ts = (TrainStation)proxy.getProxy(new TrainStation());
   ts.saleTicet();
  }
}

4. 測試結果如下:

    送票上門服務
    卖火车票
    買票打折服務

0
2
分享到:
评论

相关推荐

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

    在"通过Configuration文件实现AOP.docx"文档中,可能会详细讲述如何在Spring配置文件中配置AOP代理,包括如何选择使用JDK动态代理还是CGLIB。 总结来说,JDK动态代理简单且高效,适合接口驱动的设计,而CGLIB适用于...

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

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

    JDK动态代理和CGLIB代理

    JDK动态代理和CGLIB代理是两种常用的实现方式。 首先,我们来看看JDK动态代理。JDK动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现。Proxy类用于创建一个代理对象...

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

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

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

    在 Spring AOP 框架中,默认情况下,Spring 会选择使用 JDK 动态代理,但是如果目标对象没有实现接口,Spring 就会选择使用 CGLIB 动态代理。这种机制可以确保 Spring AOP 框架可以代理任何类型的对象,无论它是否...

    动态代理和cglib例子

    动态代理和CGLIB在Java开发中扮演着重要的角色,特别是在实现面向切面编程(AOP)和增强对象功能方面。动态代理允许我们在不修改原始代码的情况下,为已有对象添加额外的功能,比如日志记录、性能监控等。而CGLIB...

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

    Spring框架是AOP实现的一个典范,它提供了两种主要的动态代理方式:JDK动态代理和CGLib动态代理。 **JDK动态代理**: JDK动态代理基于Java的反射API实现,适用于接口代理。当目标对象实现了至少一个接口时,Spring...

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

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

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

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

    Jdk动态代理,cglib动态代理,反射和拦截器(链)示例

    当JDK动态代理无法满足需求,例如代理的目标类没有实现接口时,CGLIB就能派上用场。CGLIB是一个强大的高性能的代码生成库,它可以在运行期扩展Java类与实现Java接口。CGLIB通过生成子类并在子类的方法上织入增强代码...

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

    JDK动态代理基于Java的接口机制实现,因此,要使用JDK动态代理,被代理的目标类必须实现至少一个接口。`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口是JDK动态代理的核心。Proxy类用于...

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

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

    Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理)

    CGLIB 动态代理是另外一种动态代理方式,使用 ASM 字节码操作库来生成代理类。CGLIB 动态代理的优点是可以代理 final 类和 private 方法。 五、 对比分析 | 代理方式 | 优点 | 缺点 | | --- | --- | --- | | 静态...

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

    总的来说,Java动态代理和CGLIB动态代理都是强大的工具,能够帮助开发者实现AOP编程,提升代码的可维护性和复用性。根据实际需求和场景选择合适的代理方式,可以有效地优化应用程序的设计和性能。

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

    Java提供了两种主要的代理实现方式:JDK静态代理和动态代理,另外还有第三方库如CGlib提供的代理实现。下面我们将详细探讨这些代理技术,并通过代码演示来理解它们的工作原理。 ### 1. JDK静态代理 静态代理是我们...

    JDK动态代理和Cglib动态代理实例源码

    - **性能**:Cglib通常比JDK动态代理更快,因为它使用字节码生成子类,而JDK则需要创建接口的实现类。 - **灵活性**:JDK代理要求目标类实现接口,而Cglib无此限制。 - **使用场景**:如果目标类已经实现了接口,且...

    代理模式-静态动态代理-jdk动态代理-cglib动态代理

    在Java中,代理模式有多种实现方式,包括静态代理、JDK动态代理和CGLIB动态代理。 **静态代理** 静态代理是最早也是最基础的代理实现方式。在静态代理中,我们需要创建一个代理类,这个代理类与原始类(被代理类)...

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

    CGLIB是Code Generation Library的缩写,它基于ASM库动态生成字节码实现代理。 1. **引入依赖**:由于CGLIB不是Java标准库的一部分,我们需要在项目中添加对应的依赖。 2. **创建Enhancer对象**:CGLIB的`...

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

    Java 动态代理详解与 CGLib 实现 在 Java 中,代理模式是一种设计模式,它允许我们在不修改原有对象的基础上,为对象增加额外的功能。代理模式的核心在于代理类(Proxy)作为真实对象(RealSubject)的替代品,提供...

    jdk动态代理和CGlib动态代理

    JDK动态代理和CGlib动态代理是Java中实现这一目标的两种主要方式。 ### JDK动态代理 JDK动态代理基于Java的接口实现。如果一个类实现了至少一个接口,我们就可以为这个类创建一个动态代理。动态代理通过`java.lang....

Global site tag (gtag.js) - Google Analytics