jdk1.8 和spring 2.5.5 兼容性问题

原创 2016年05月30日 17:27:17

先看异常:

nested exception is java.lang.ArrayIndexOutOfBoundsException: 9578
 at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
 at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
 at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:76)
 at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:182)
 at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:147)
 at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:132)
 at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:92)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:507)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:398)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
 at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)
 at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:92)
 at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
 at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:423)
 at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:353)
 at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
 at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
 at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)

由于工程中配置了 扫描jar包,类比较多,不好定位,我在本地实现的测试,代码如下:

public class MyMetadataReader implements MetadataReader {

    private final ClassReader classReader;

    private final ClassLoader classLoader;


    public MyMetadataReader(ClassReader classReader, ClassLoader classLoader) {
        this.classReader = classReader;
        this.classLoader = classLoader;
    }


    public ClassMetadata getClassMetadata() {

        ClassMetadataReadingVisitor visitor = new ClassMetadataReadingVisitor();
        this.classReader.accept(visitor, true);
        return visitor;
    }

    public AnnotationMetadata getAnnotationMetadata() {
        AnnotationMetadataReadingVisitor visitor = new AnnotationMetadataReadingVisitor(this.classLoader);
        this.classReader.accept(visitor, true);
        return visitor;
    }

}

测试:

ClassReader reader = new ClassReader(in);
                       MetadataReader metadataReader = new MyMetadataReader( reader, classLoader);
                       metadataReader.getAnnotationMetadata();

最终获取了 这个读取错误的class文件,发现,里面使用了java8的 lambda表达式特性

firstElements.forEach(e -> root.add(e.addAttribute("class","1").detach()));
            secondElements.forEach(e -> root.add(e.addAttribute("class","2").detach()));
            thirdElements.forEach(e -> root.add(e.addAttribute("class","3").detach()));

ClassReader 这个类在spring4.X中重写了,不禁要问,如果spring不升级到4.x,难道真的无法使用java8 新特性?如果是这样的话,真是个好大的坑!

经过测试,在Spring 2.5.5 使用注解扫描时,会使用到 类ComponentScanBeanDefinitionParser中的方法,进而会调用 ClassReader中的方法,则Spring无法正常初始化。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

jar包对不同JDK版本的兼容性问题:Unsupported major.minor version 52.0

Unsupported major.minor version 52.0 这类错误是因为Java版本不一致造成的,在高版本的JDK(1.8)环境中编译JAR包,然后JAR在低版本的JVM(1.6)中运...

JDK版本不兼容问题之:一台机器安装多个版本的JDK

我的机器上最开始安装的是jdk1.6,后来因为工作需要又安装了jdk1.4。但是,环境变量我并未更改,还是指向jdk1.6的路径的。 可是,在cmd窗口输入 java -version 却得到...

JDK版本兼容性问题以及在Eclipse中设置不同jdk版本编译

JDK版本兼容性问题以及在Eclipse中设置不同jdk版本编译

深入理解java 版本兼容问题

我们在做dubbo接口开发是,要考虑jdk版本兼容的问题。如果是高版本的jre运行低版本jdk compile 的jar,根据java的向下兼容性,这个没有问题。但如果是低版本jre运行高版本的jdk...

spring2.5+JDK1.8报错的解决办法

annotation-config are only available on JDK 1.5 and higher

spring2.5+JDK1.8报错的解决办法

转自:http://blog.csdn.net/zhaohuihua/article/details/50572861 annotation-config are only available on...
  • frt007
  • frt007
  • 2016-03-13 21:50
  • 2128

spring2.5+JDK1.8 版本报错的解决办法

转自:http://blog.csdn.net/frt007/article/details/50880648   今天遇到一个工程,启动时报这个错!可明明我的JDK是1.8呀。 原来这个工...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)