Java自定义Class加载顺序


思路一 :打破双亲加载
1、在Java中默认的Class加载顺序都是父类委托加载,但是有些时候需要自定义加载顺序比如OSGI和ali的Pandora。

2、父类委托加载的基本实现思路,loadClass中在parent中查找class,要是不存在parent则使用findBootstrapClassOrNull调用native方法,要是找不到,使用其中findClass去查找。

3、普通自定义classLoader只是继承loadClass方法,实现findClass做到自定义去加载自己位置或者自己实现的class。但是要想打破父类委托机制去自定义前后顺序去加载class就要完全自己去实现loadClass自己控制加载顺序,比如OSGI bundle之间相互引用的ClassLoader去加载。

思路二、利用双亲加载
1、基本思路就是,自定义classLoader,然后将自定义的classLoader设置为extClassLoader的parent,然后利用双亲加载(除去jdk class)其他的class就会加载自己的class,防止了类冲突的问题。

猜你喜欢

转载自takemind.iteye.com/blog/2342319