项目中用的是spring 低版本(2.5.6),今天用jre 8测试 了一下,发现错误: Unexpected exception parsing XML document from class path resource [applicationContext-dao.xml]; nested exception is Java .lang.IllegalStateException: Context namespace element ‘annotation-config’ and its parser class [org.springframework.context.annotation.AnnotationConfigBeanDefinitionParser] are only available on JDK 1.5 and higher
看源码是org.springframework.context.annotation.AnnotationConfigBeanDefinitionParser自动检测,jdk版本检测时需要jre1.5以上版本,但是JdkVersion只检查到了1.7,jre1.8 时不匹配任何jdk,按如下方法处理,可以解决问题。
1、在项目中创建一个package为org.springframework.core 2、在该package下面新建JdkVersion.java,内容如下:
package org.springframework.core;
public abstract class JdkVersion {
public static final int JAVA_13 = 0 ;
public static final int JAVA_14 = 1 ;
public static final int JAVA_15 = 2 ;
public static final int JAVA_16 = 3 ;
public static final int JAVA_17 = 4 ;
public static final int JAVA_18 = 5 ;
private static final String javaVersion = System
.getProperty("java.version" );
private static final int majorJavaVersion;
public static String getJavaVersion () {
return javaVersion;
}
public static int getMajorJavaVersion () {
return majorJavaVersion;
}
public static boolean isAtLeastJava14 () {
return true ;
}
public static boolean isAtLeastJava15 () {
return getMajorJavaVersion() >= 2 ;
}
public static boolean isAtLeastJava16 () {
return getMajorJavaVersion() >= 3 ;
}
static {
if (javaVersion.indexOf("1.8." ) != -1 ) {
majorJavaVersion = 5 ;
}else if (javaVersion.indexOf("1.7." ) != -1 ) {
majorJavaVersion = 4 ;
} else if (javaVersion.indexOf("1.6." ) != -1 ) {
majorJavaVersion = 3 ;
} else if (javaVersion.indexOf("1.5." ) != -1 ) {
majorJavaVersion = 2 ;
} else {
majorJavaVersion = 1 ;
}
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
3、到项目的WEB-INF/classes 下面找到对应的package中的JdkVersion.class文件 4、将项目中的spring-core-2.5.6.jar拷贝出来打开,然后将JdkVersion.class替换jar包中的该文件。 5、将修改后的spring-core-2.5.6.jar再覆盖到项目中。
这样,再启动项目就不会出现错误了。