Spring 3.2.0 版本的一个 ClassMetadataReadingVisitor 错误

今天把自己的一个项目,从 Spring 3.0.6 升级到 3.2.0 ,Maven中更新依赖包后,直接报下面错误:

java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:281)

  

Incompatible 英文是矛盾的意思,也就是有冲突,再看后面的错误:ClassMetadataReadingVisitor has interface ClassVisitor,也就是说 ClassMetadataReadingVisitor 实现了 ClassVisitor 接口,但是貌似这里出现了问题,于是我看Spring中2个版本的源码,发现了变化。在 Spring 3.0.6中:
class ClassMetadataReadingVisitor implements ClassVisitor, ClassMetadata {
...
在 Spring 3.2.0中:
class ClassMetadataReadingVisitor extends ClassVisitor implements ClassMetadata {
...

大家都看到问题在哪了吧,3.0.6中,ClassVisitor 是一个接口(interface ClassVisitor),而在3.2.0中,ClassVisitor变成了抽象类(abstract class ClassVisitor)。

为了解决这一问题,最好的办法就是版本一致,也就是所有spring的包,最好是同一个版本,或同一阶段的版本。




本文转自远哥博客园博客,原文链接http://www.cnblogs.com/taven/archive/2013/04/02/2994998.html,如需转载请自行联系原作者

上一篇:常用软件工具


下一篇:GNU通用公共授权(GNU General Public License)中英文版全文