1. 什么是双亲委托机制

tomcat为什么要违背双亲委托机制

双亲委托的含义:

1) 加载的顺序固定---引导类加载器--》扩展类加载器--》应用类加载器---》自定义类加载器 

2) 当我们使用扩展类加载器加载某个类的时候,若引导类加载器已经加载的该类,就不会继续加载过程

3) 下一级类加载器的加载过程依赖上一级类加载器

4)jdk核心class只能被加载一次

双亲委派模型的工作过程是:如果一个类加载器收到了类加载的请求,他首先不会自己去尝试加载这个类,而是把这个请求委派父类加载器去完成。每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个请求时,子加载器才会尝试自己去加载。

2. tomcat的类加载机制

tomcat为什么要违背双亲委托机制

 

3. 双亲委托能否满足tomcat的业务需求

1) tomcat需要保证各个web项目的类独立加载,不同项目的相同jar可能版本不一致,需要保持依赖Jar相互独立

2)  web容器依赖的类库与web项目依赖的类库隔离

3)jsp热部署的实现

 默认的类加载机制需要保证class的唯一性,不能满足上述需求,也不能实现热部署。需要自定义类加载器。

 

4. tomcat如何解决class隔离问题

线程上下文加载器: 父类加载器请求子类加载器去完成类加载的动作,完成逆向双亲委托加载流程。

线程上下文类加载器(Thread Context ClassLoader):这个类加载器可以通过java.lang.Thread类的setContextClassLoader方法进行设置。如果创建线程时还未设置,它将会从父线程中继承一个,如果在应用程序的全局范围内都没有设置过的话,那这个类加载器默认即使应用程序类加载器。

 

相关文章: