Java动态编程初探——Javassist

本文详细介绍了ClassPool和CtClass的概念及其在Javassist中的应用。ClassPool作为CtClass对象的容器,用于存储和管理这些对象,确保在程序运行过程中能够正确地编译和操作类。此外,还探讨了如何通过detach方法有效管理内存,避免内存溢出的问题。
ClassPool
ClassPool对象是一个CtClass对象的容器。一个CtClass对象被构建后,它被记录在ClassPool中。这是因为当编译的原文件关联到CtClass表示的类, 编译器要访问CtClass对象。

例如,假定一个新方法getter()要加入到CtClass对象表示的的Point类。程序试图编译Point中的方法getter()的源代码,用编译过的代码做为方法内容,将它加到另一个类Line中。如果CtClass对象表示的Point丢失了,编译器将不能编译getter()方法。注册初始的类不包含getter()方法。因此,为了正确的编译一个方法,ClassPool必须拥有程序运行时所有的CtClass实例。

避免内存溢出
ClassPool的特点决定了当 CtClass对象数量很多时,它所占的内存会非常大。为了避免这种情况发生,你可以明确的移除一个ClassPool中的不需要的CtClass对象。如果用CtClass的detach()方法,CtClass对象将从ClassPool中移除。例如:
CtClass cc = ... ;
cc.writeFile();
cc.detach();
执行deatach()后,将不能执行CtClass对象的任何方法。但是,可以执行ClassPool的get()方法得到表示同一个类的CtClass实例。执行get()后,ClassPool再次读取类文件,重新建立CtClass对象。

[url]http://www.cnblogs.com/hucn/p/3636912.html[/url]

[url]http://blog.youkuaiyun.com/mousebaby808/article/details/37696371[/url]

javassist学习
[url]http://yonglin4605.iteye.com/blog/1396494[/url]
[url]http://blog.youkuaiyun.com/sadfishsc/article/details/9999169[/url]

Javassist注解(Annotation)的使用:CXF WebService动态生成
[url]http://www.cnblogs.com/coshaho/p/5105545.html[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值