jdk1.8 和spring 2.5.5 兼容性问题
来源:互联网 发布:淘宝众筹 万创中国 编辑:程序博客网 时间:2024/06/07 11:29
先看异常:
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无法正常初始化。
0 0
- jdk1.8 和spring 2.5.5 兼容性问题
- spring 和 quartz 整合版本兼容性问题
- jdk1.5 jdk1.6 jdk1.7 jdk1.8 特性
- jdk1.5 jdk1.6 jdk1.7 jdk1.8 特性
- jdk1.5 jdk1.6 jdk1.7 jdk1.8 特性
- jdk1.5 jdk1.6 jdk1.7 jdk1.8 特性
- jdk1.7和jdk1.8区别
- JDK1.7和JDK1.8新特性
- jdk1.7和jdk1.8区别
- jdk1.7和jdk1.8区别
- jdk1.7和jdk1.8区别
- JDK1.4和JDK1.5的区别
- jdk1.4,jdk1.5和jdk1.6的区别
- jdk1.4,jdk1.5和jdk1.6的区别-笔记
- jdk1.4,jdk1.5和jdk1.6的区别
- jdk1.4,jdk1.5和jdk1.6的区别
- jdk1.4,jdk1.5和jdk1.6的区别
- 安装MAVEN(JDK1.8和Maven3.5)
- JavaScript基础——引用类型(三)Function类型
- 个人看B站的一些姿势
- maven错误锦集- Could not transfer artifact com.oracle:ojdbc14:jar:10.2.0.4.0
- PPT制作自我介绍的要点
- 简单的九九乘法表
- jdk1.8 和spring 2.5.5 兼容性问题
- Service的简单使用
- EasyUI DataGrid 时间格式化
- 打开解决方案,遇到“无法迁移解决方案文件”错误
- Android性能优化策略
- 10分钟 搞定JS和OC交互
- swift 的学习资料汇总
- 倾斜的地图
- Hibernate基础知识(2)