第九章 类加载以及执行子系统的案例与实战
** 第九章的重点在于后边的那个实战小例子,故这次仅仅总结一下Tomcat类加载机制、OSGi、动态反射 **
9.1 Tomcat类加载架构
9.1.1 Tomcat四组目录
可以把Java类库放置在这些目录中
/common/* : 类库可被Tomcat和所有的Web应用程序共同使用
/server/* : 类库可被Tomcat使用,对所有的Web应用程序都不可见。
/shared/* : 类库可被所有的Web应用程序共同使用,但对Tomcat自己不可见。
/WebApp/WEB-INF/* : 类库仅仅可以被此Web应用程序使用,对Tomcat和其他Web应用程序都不可见。
9.1.2 加载架构(自制大图,实惠!):
注意: 对于Tomcat 6.0 以后的版本,只有指定了tomcat/conf/catalina.properties配置文件的server.loader和share.loader项后才会真正建立CatalinaClassLoader和SharedClassLoader的实例,否则会用到这两个类加载器的地方都会用CommonClassLoader的实例来代替。如果默认设置不能满足需要,用户可以通过修改配置文件指定server.loader和share.loader的方式重新启用Tomcat 5.x的加载架构。
每一个JSP文件对应一个Jsp ClassLoader则可以使Tomcat支持热替换功能
9.2.OSGi:灵活的类加载器架构
OSGi是OSGi联盟制订的一个基于JAVA语言的动态模块化规范,这个规范最初由Sun、IBM、爱立信等公司联合发起,目的是使服务提供商通过住宅网关为各种家用智能设备提供各种服务,后来这个规范在Java的其他技术领域也有相当不错的发展,现在已经成为java世界中“事实上”的模块化标准,并且已经有了Equinox、Felix等成熟的实现。
在OSGi里面,加载器之间的关系不再是双亲委派模型的树形结构,而是已经进一步发展成了一种运行时才能确定的网状结构。
9.3.动态代理的实现
Proxy、InvocationHandler接口编程
9.4 Retrotranslator: 跨越JDK版本
Retrotranslator的作用是将JDK1.5编译出来的Class文件转变为可以在JDK1.4或1.3上部署的版本,它可以很好地支持自动装箱、泛型、动态注解、枚举、变长参数、遍历循环、静态导入这些语法特性,甚至还可以支持JDK1.5中新增的集合改进、并发包及对泛型、注解等的反射操作。