关于类的依赖类加载问题?望请教.
如题, 比如类A, 有一成员类B, 此时用类加载器加载A后, B也是A类的加载器加载的.
请问, 怎么实现, 让成员B的类加载器是其他类加载器, 或者是父类加载器.
是不是必须使用线程上下文加载器, 才能实现?因为可以不需要委托? 1 楼 galaxystar 2007-10-10 以前做了个测试:
类A是非系统类加载器加载的类(即自定义的类加载器, 不使用委派), 它有一个成员变量类B, 类A被加载后, 发现这个类B竟然不是A的类加载器加载的.
感觉这个跟Class.forName, 使用当前被调用的类的类加载器有点区别.
2 楼 slangmgh 2007-10-10 A应用B,你们B的Class会有A的ClassLoader来执行loadClass,但是最终B的ClassLoader不一定是A的ClassLoader,其结果依赖于A的ClassLoader的实现。
一般情况下ClassLoader会首先检查类是否已经在本ClassLoader中加载,如果没有,就从parent ClassLoader中加载,否则根据自己的策略进行加载。
但是ClassLoader的实现也可以完全不按照上面的方法。 3 楼 kenwu 2007-10-10 slangmgh 写道A应用B,你们B的Class会有A的ClassLoader来执行loadClass,但是最终B的ClassLoader不一定是A的ClassLoader,其结果依赖于A的ClassLoader的实现。
一般情况下ClassLoader会首先检查类是否已经在本ClassLoader中加载,如果没有,就从parent ClassLoader中加载,否则根据自己的策略进行加载。
但是ClassLoader的实现也可以完全不按照上面的方法。
那可不可以说, 类B的加载, 一定是调用的loadClass()方法?
如果不是, 那它怎么知道用哪个方法可以加载类? 4 楼 slangmgh 2007-10-11 kenwu 写道
那可不可以说, 类B的加载, 一定是调用的loadClass()方法?
如果不是, 那它怎么知道用哪个方法可以加载类?
是的。如果是第一次,一定会调用类A的ClassLoader的loadClass。你可以自己写一个ClassLoader测试一下就知道了。