項目搭建SSM工程時,遇到了這樣一個錯誤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。
錯誤原始是JDK版本和Spring版本衝突導致。
解決方法大致有以下3種:
1.降低JDK版本或提高Spring版本
2.源碼是org.springframework.context.annotation.AnnotationConfigBeanDefinitionParser自動檢測,jdk版本檢測時需要jre1.5以上版本,但是JdkVersion只檢查到了1.7,jre1.8 時不匹配任何jdk,按如下方法處理,可以解決問題。
2-1在項目中創建一個package爲org.springframework.core
2-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;
//for jre 1.8
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 {
//for jre 1.8
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;
}
}
}
2-3、到項目的WEB-INF/classes 下面找到對應的package中的JdkVersion.class文件 2-4、將項目中的spring-core-2.5.6.jar拷貝出來打開,然後將JdkVersion.class替換jar包中的該文件。
2-5、將修改後的spring-core-2.5.6.jar再覆蓋到項目中。
3.有些時候spring的版本是對的,這個時候可能是引用的依賴spring版本太低,這次我引入的是dubbo,其依賴的spring-2.0.3造成了錯誤,需要在pom.xml下面加上
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
update maven後可以正常運行。
4.右鍵Tomcat,clean一下,重新運行,也可以。
以上就是我總結的幾種方法,踩過的坑。