http://blog.csdn.net/loveyly/archive/2007/09/21/1794927.aspx 第一部分
http://blog.csdn.net/loveyly/archive/2007/09/21/1794971.aspx 第二部分
http://blog.csdn.net/loveyly/archive/2007/09/25/1799733.aspx 第三部分
对于ClassLoader 的设计, 可以按照如下的思路进行:
1. 首先检测缓存中是否存在该className的key(注意是存在key, 可以参考我以前的一片文章http://blog.csdn.net/loveyly/archive/2007/09/19/1791577.aspx), 如果存在, 则直接返回;
2. 否则使用 parent ClassLoader (一般是当前线程的上下文ClassLoader)查找该类, 如果找到, 放入缓存, 返回;
3. 如果没有, 使用获取对象描述, 使用javassist动态构造类, 并使用本ClassLoader 实例装载该类, 然后返回;
4. 实现一个destroy 方法, 负责清空缓存并调用 Introspector.flushCaches() (负责清空bean的一些缓存).
当更新一个对象描述时, 需要重新使用一个 ClassLoader 实例, 并调用先前的ClassLoader的destroy方法, 让其被垃圾回收.