高手能否能给初学者讲讲动态代理?

         
holykeeper
04-07-03 1 456

在论坛看到一些高级话题时往往会提及“动态代理”。本人对“动态代理”的概念理解不够深入,相信不少道友也有同感,能否能给出一些例子?
谢谢!

buaawhl
2004-07-09 18:14

动态代理的基本机制:在运行期间,(Byte Code Instrument)动态生成Byte Code,动态生成Java类。

我所知道的Class Byte Code操作工具实现有2种:

BCEL 按照DOM结构方式操作Byte Code。
http://jakarta.apache.org/bcel/index.html

ASM 按照SAX方式(Visitor模式)操作Byte Code。
http://asm.objectweb.org/

有了Byte Code操作工具,就可以在运行期间动态生成代理类了。
cglib就是这样一个动态代理类的生成工具。
http://cglib.sourceforge.net/

cglib能够生成多种丰富的动态代理类。

JDK1.4引入了动态代理类的简单实现(只提供一种代理类)。
包括java.lang.reflect包的Proxy类和InvocationHandler类这两个标准的API。操作Byte Code的具体类是sun.misc.ProxyGenerator类。

Sun JDK 源代码下载:
http://wwws.sun.com/software/communitysource/
先注册并登录到“Sun Community Source Licensing”,然后下载J2SE(几十兆)或者J2EE(几百兆)。

动态代理是实现AOP的一种流行的方法。
关于JDK1.4 Proxy的具体用法。这里不再赘述。下面有些中文文章。

Banq的文章。
http://www.jdon.com/AOPdesign/spring.htm

还有:
http://www-900.ibm.com/developerWorks/cn/java/l-connpoolproxy/index.shtml