打破双亲委派的原因
双亲委派的机制,是AppClassLoader
先委托给ExtClassLoader
类加载器进行加载,ExtClassLoader
加载不了,则交由BootstrapClassLoader
进行加载操作;
如果BootstrapClassLoader
依旧加载不了,则才反向委托,直至AppClassLoader
加载完成。
这样能保证,像java.lang.Object
这些核心的类不被外界自定义加载,保证使用到的类库为官方定义的库,保证程序执行的安全性。
[问:]
这样真的好吗?
如果服务器上,项目A使用某个框架的版本为低版本,项目B使用的版本为高版本。
每个版本之间,某些特定方法的实现上会有细微的差别,比如高版本使用Lambda
,而低版本没有。
如果此时依靠双亲委派机制
,将低版本的实现方式加入。
此时由于A项目已经针对该类做了加载,B项目则无需继续加载!
则会导致高版本因为环境因素,无法启动ÿ