KACARICH'S BLOG's Archivers

From kaca.rich on 2014-01-03 05:45:02

关于classNotFound exception

对于这个异常,相信有的朋友会经常遇到,鄙人也遇到不少,相信大家也常常会遇到编译异常,classNotDef.

classnotDef是编译时候就会出现的一个异常。classNotFound我们经常遇到的一些问题,是使用了一些流行框架,他们总是喜欢使用反射包,class.forName, 自定义自己的classLoader.或者使用classLoader去加载查找一个类。

由于加班较晚,实在累了,趁洗澡,吃泡面的功夫,就只稍微阐述一下由于依赖一些第三方框架jar包,然而还是多个重复的,版本号不一样的为什么会引发这个异常。

相信各位朋友都能理解命名空间这个概念,classLoader也有这个概念,如果不对各个classLoader建立委托派生关系,每个classLoader都会是各自独立的,然后各个独立的classLoader 加载的类他们之间的类是不会共享冲突的,osgi的核心就很好的利用了jvm的这个强大特性。隔离各个bundle,不用担心jar包冲突。然后如果打个比方(待验证),spring框架的核心jar包存在两个版本,然后spring context初始化factoryBean的时候必然会根据配置去加载类配置类,初始化ioc容器,那我们都会知道她两个classLoader有可能是被一个classLoader委托派生出来的,所以他们两就是隔离的。那有可能如果classLoader bootstrap开始对spring classLoader加载并实列化的时候有可能会找到两个类,然后有可能她会让这两个都初始化用去加载后续类用户bean(待验证),然而如果他用另外一个classloader a 加载了userclass1 然而userclass1依赖userclass2,他再用classLoader b 去加载userclass2那这个时候classNotFound异常就出现了。。还有一点补充,tomcat等容器都是多线程的,在对类加载这块使用移步操作应该会快不少,那么这种classLoader安全机制也可能出现问题。

以上只是个人一向的错误思想,待验证,由于比较懒,还是留到惰性消失的时候再验证吧。

查看完整版本: 关于classNotFound exception

Tags:


©KACARICH'S BLOG