- 浏览: 179047 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (104)
- JavaScript备忘 (11)
- Java编程 (23)
- struts框架 (3)
- hibernate框架 (0)
- ibatis框架 (2)
- C++编程 (2)
- 数据库 (8)
- 操作系统 (2)
- Extjs (0)
- 基于web的工作流引擎设计 (0)
- 开发异常备忘 (5)
- 项目管理工具 (6)
- Spring框架 (3)
- HTML (1)
- 项目架构 (1)
- 备忘 (20)
- 设计模式 (9)
- Disruptor (0)
- CQRS (0)
- DDD (0)
- Axon (0)
- JavaScript (1)
- 微信 (0)
- 新浪微博 (1)
- 软件备份 (2)
- AngularJS (1)
- 安全性 (1)
- Linux (2)
- 工具 (4)
- OSGI (1)
- idea (2)
- Docker (1)
- 测试相关 (0)
- WebService (1)
- 数据安全 (0)
- 移动开发 (0)
- springboot (1)
最新评论
-
larryscale:
zz_wangyuhoho 写道你这个工程跑不起来呀我测试过的 ...
Springmvc3+Spring3+MyBatis3 -
zz_wangyuhoho:
你这个工程跑不起来呀
Springmvc3+Spring3+MyBatis3 -
aeolusj:
var myAlert=alert;改为var myAlert ...
js 拦截alert对话框 -
skcks:
建行内部开发平台也是做了一个类似的封装用于ajax远程调用服务 ...
通用Ajax设计 -
qiuyu1990:
这个应该是 DWR的原理吧
通用Ajax设计
一. 用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. 測試結果如下:
送票上門服務
卖火车票
買票打折服務
- cglib-nodep-2.1_3.jar (316.6 KB)
- 下载次数: 23
发表评论
-
Springboot项目(整合WebService带协议头验证+WebSocket+Web+动态日志输出)
2020-05-12 14:05 1117环境配置: springboot 1.5.14 ... -
activiti5.18 默认查询的sql生成两个order by
2019-10-17 12:14 393<spring.version>4.2.4.RE ... -
springboot 定时任务重复执行
2019-06-04 17:35 2192开发一数据接收WebService,里面用到定时任务@Sc ... -
mybatis-generator自动生成代码[增加Service的生成]
2016-03-22 10:08 9899源码包见附件[Maven项目,在1.3.2基础上修改官方源码] ... -
网络状态监控
2014-06-27 12:56 636import java.io.BufferedReader; ... -
Spring MVC+Jquery Ajax 前后台传递Json对象
2014-03-29 10:02 6148关于Spring MVC3.X 接收和返回Json ... -
同时启动多个Tomcat服务器
2013-10-25 17:15 597我所用Tomcat服务器都为zip版,非安装版。以两个为例: ... -
md5+BASE64加密
2013-10-08 23:20 981import sun.misc.BASE64Encoder; ... -
用MD5对密码进行加密
2013-08-10 15:21 1027package com.yong.bin.md5; i ... -
把CST格式的字符串转成普通的日期格式
2013-02-27 15:58 1592public static void main(Str ... -
Springmvc3+Spring3+MyBatis3
2012-11-27 15:03 1381最近写的一个三层框架:Springmvc3+Spring3+ ... -
Java技术——内部类
2012-11-18 17:35 931内部类 (inner class) 定义:在一个类中定义 ... -
自定义标签
2012-10-26 17:13 0<?xml version="1.0" ... -
log4j.properties
2012-10-24 12:32 0log4j.rootLogger=INFO, log4j ... -
通用Ajax设计
2012-10-21 10:20 2021利用Servlet和反射技术实现通用的Ajax调用设计,如下: ... -
导入Jar包的快捷键
2012-07-02 22:47 1177导入当前光标所在的地方未导入的Jar包: shift+ctrl ... -
Extjs grid 后台
2012-05-22 08:16 0public String gridRecordsByXML( ... -
Extjs 布局
2012-04-18 12:27 0<%@ page language="java ... -
FreeMarker在java项目中的应用
2011-02-15 21:34 3212一、体验FreeMarker FreeMar ... -
动态代理 [用jdk实现]
2011-02-08 16:41 1202一. java 的jdk動態代理 ...
相关推荐
在"通过Configuration文件实现AOP.docx"文档中,可能会详细讲述如何在Spring配置文件中配置AOP代理,包括如何选择使用JDK动态代理还是CGLIB。 总结来说,JDK动态代理简单且高效,适合接口驱动的设计,而CGLIB适用于...
本文将深入探讨两种主要的Java代理实现:JDK动态代理和CGLIB代理。 一、JDK动态代理 JDK动态代理基于接口实现,它要求被代理的类必须实现至少一个接口。在运行时,Java会动态地创建一个新的类,这个类实现了与原始...
JDK动态代理和CGLIB代理是两种常用的实现方式。 首先,我们来看看JDK动态代理。JDK动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现。Proxy类用于创建一个代理对象...
Java中的动态代理是一种重要的设计模式...总结来说,JDK动态代理和CGLIB动态代理都是为了在运行时提供对目标对象的增强,它们通过不同的实现方式提供了扩展功能的可能性,开发者可以根据项目需求和场景选择合适的技术。
在 Spring AOP 框架中,默认情况下,Spring 会选择使用 JDK 动态代理,但是如果目标对象没有实现接口,Spring 就会选择使用 CGLIB 动态代理。这种机制可以确保 Spring AOP 框架可以代理任何类型的对象,无论它是否...
动态代理和CGLIB在Java开发中扮演着重要的角色,特别是在实现面向切面编程(AOP)和增强对象功能方面。动态代理允许我们在不修改原始代码的情况下,为已有对象添加额外的功能,比如日志记录、性能监控等。而CGLIB...
Spring框架是AOP实现的一个典范,它提供了两种主要的动态代理方式:JDK动态代理和CGLib动态代理。 **JDK动态代理**: JDK动态代理基于Java的反射API实现,适用于接口代理。当目标对象实现了至少一个接口时,Spring...
以下是使用CGlib实现动态代理的关键步骤: 1. 引入依赖:在项目中,需要引入CGlib的相关库,通常是在Maven或Gradle的配置文件中添加对应的依赖。 2. 创建Enhancer对象:Enhancer是CGlib的核心类,它提供了创建代理...
在Java编程领域,动态代理和Cglib代理是两种常用的技术,用于在运行时创建对象的代理,以实现额外的功能,如AOP(面向切面编程)中的日志、事务管理等。本篇文章将深入探讨这两种代理机制,尤其是Cglib代理。 首先...
当JDK动态代理无法满足需求,例如代理的目标类没有实现接口时,CGLIB就能派上用场。CGLIB是一个强大的高性能的代码生成库,它可以在运行期扩展Java类与实现Java接口。CGLIB通过生成子类并在子类的方法上织入增强代码...
JDK动态代理基于Java的接口机制实现,因此,要使用JDK动态代理,被代理的目标类必须实现至少一个接口。`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口是JDK动态代理的核心。Proxy类用于...
Java提供了两种主要的动态代理实现方式:JDK动态代理和CGLIB动态代理。 **JDK动态代理**: JDK动态代理基于接口实现,也就是说,被代理的对象必须实现至少一个接口。代理机制的核心是`java.lang.reflect.Proxy`类和...
CGLIB 动态代理是另外一种动态代理方式,使用 ASM 字节码操作库来生成代理类。CGLIB 动态代理的优点是可以代理 final 类和 private 方法。 五、 对比分析 | 代理方式 | 优点 | 缺点 | | --- | --- | --- | | 静态...
总的来说,Java动态代理和CGLIB动态代理都是强大的工具,能够帮助开发者实现AOP编程,提升代码的可维护性和复用性。根据实际需求和场景选择合适的代理方式,可以有效地优化应用程序的设计和性能。
Java提供了两种主要的代理实现方式:JDK静态代理和动态代理,另外还有第三方库如CGlib提供的代理实现。下面我们将详细探讨这些代理技术,并通过代码演示来理解它们的工作原理。 ### 1. JDK静态代理 静态代理是我们...
- **性能**:Cglib通常比JDK动态代理更快,因为它使用字节码生成子类,而JDK则需要创建接口的实现类。 - **灵活性**:JDK代理要求目标类实现接口,而Cglib无此限制。 - **使用场景**:如果目标类已经实现了接口,且...
在Java中,代理模式有多种实现方式,包括静态代理、JDK动态代理和CGLIB动态代理。 **静态代理** 静态代理是最早也是最基础的代理实现方式。在静态代理中,我们需要创建一个代理类,这个代理类与原始类(被代理类)...
CGLIB是Code Generation Library的缩写,它基于ASM库动态生成字节码实现代理。 1. **引入依赖**:由于CGLIB不是Java标准库的一部分,我们需要在项目中添加对应的依赖。 2. **创建Enhancer对象**:CGLIB的`...
Java 动态代理详解与 CGLib 实现 在 Java 中,代理模式是一种设计模式,它允许我们在不修改原有对象的基础上,为对象增加额外的功能。代理模式的核心在于代理类(Proxy)作为真实对象(RealSubject)的替代品,提供...
JDK动态代理和CGlib动态代理是Java中实现这一目标的两种主要方式。 ### JDK动态代理 JDK动态代理基于Java的接口实现。如果一个类实现了至少一个接口,我们就可以为这个类创建一个动态代理。动态代理通过`java.lang....