在tomcat中Spring如何管理不同webapp目录下的应用程序
在《深入理解 虚拟机》第二版第九章中作者提到了一个问题,背景是这样的,Tomcat 5为了隔离不同应用程序使用的Java类库的不同版本,而且共享不同应用程序中的相同的java类库,使用了几个不同的目录,对应每个目录有着不同的类加载器。其结构如下:上面三个是JDK提供的三个默认类加载器:启动类加载器、扩展类加载器和应用程序类加载器。而下面的几个是tomcat自己定义的类加载器,分别用来加载相应目录下
在《深入理解 虚拟机》第二版第九章中作者提到了一个问题,背景是这样的,Tomcat 5为了隔离不同应用程序使用的Java类库的不同版本,而且共享不同应用程序中的相同的java类库,使用了几个不同的目录,对应每个目录有着不同的类加载器。其结构如下:
上面三个是JDK提供的三个默认类加载器:启动类加载器、扩展类加载器和应用程序类加载器。而下面的几个是tomcat自己定义的类加载器,分别用来加载相应目录下的java类库。问题是这样的:假如把Spring类库放到share目录下(如果每个用户程序都有一个自己的spring类库,那么虚拟机的方法区可能会占用很大空间),而用户的程序显然要放在webapps目录下,那么根据双亲委派模型,WebAppClassLoader是能够访问到其父加载器SharedClassLoader加载的类的,这个没有问题。但是由于Spring需要管理用户程序,所以它必须能访问到用户程序的类,而用户程序的类是由WebAppClassLoader来加载的,那么被 SharedClassLoader加载的Spring怎么访问到并还在其加载范围的用户程序的类呢?这个问题在一位博主的文章里进行了详细的分析,由于不知道怎么转载,所以就直接给个地址好了:这里。
更多推荐
所有评论(0)