我们平时在程序中写代码的时候,遇到要动态加载类的时候,一般使用Class.forName()的方式加载我们需要的类。比如最常见的,当我们进行JDBC编程的时候,我们通过Class.forName()去加载JDBC的驱动。显然,Class.forName()加载类的时候使用的类加载器可能和Thread.currentThread.getContextLoader()获取的类加载器是不同的。JVM默认有三种类加载器:。表面上,似乎很完美,但正是这种严格的双亲委派机制导致在加载类的时候,存在一些局限性。这个限制就是双亲委派机制导致的,因为类加载请求的委派是单向的。比较典型的,JNDI服务。JNDI提供了查询资源的接口,但是具体实现由不同的厂商实现。为了解决这个问题,引入了线程上下文类加载器。可以看到,引入线程类加载器实际是对双亲委派机制的破坏,但是却提供了类加载的灵活性。
暂无评论