Context namespace element 'component-scan' and its parser class [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are only available on JDK 1.5 and higher
异常信息如下:
错误: Unexpected exception parsing XML document from class path resource [spring/applicationContext-db.xml]; nested exception is java.lang.IllegalStateException: Context namespace element 'component-scan' and its parser class [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are only available on JDK 1.5 and higher
原因:
当前jdk版本的spring不支持注解,有两种方式解决这个问题。一是 换jdk,二是 加一个配置文件。
这里使用的是加一个配置文件:在src文件夹加org.springframework.core包,并添加一个JdkVersion.java文件,使注解能够识别jdk8。
JdkVersion.java文件内容如下:
package org.springframework.core; /** * Internal helper class used to find the Java/JVM version * that Spring is operating on, to allow for automatically * adapting to the present platform's capabilities. * * <p>Note that Spring requires JVM 1.5 or higher, as of Spring 3.0. * * @author Rod Johnson * @author Juergen Hoeller * @author Rick Evans */ public abstract class JdkVersion { /** * Constant identifying the 1.3.x JVM (JDK 1.3). */ public static final int JAVA_13 = 0; /** * Constant identifying the 1.4.x JVM (J2SE 1.4). */ public static final int JAVA_14 = 1; /** * Constant identifying the 1.5 JVM (Java 5). */ public static final int JAVA_15 = 2; /** * Constant identifying the 1.6 JVM (Java 6). */ public static final int JAVA_16 = 3; /** * Constant identifying the 1.7 JVM (Java 7). */ public static final int JAVA_17 = 4; /** * Constant identifying the 1.8 JVM (Java 8). */ public static final int JAVA_18 = 5; private static final String javaVersion; private static final int majorJavaVersion; static { javaVersion = System.getProperty("java.version"); // version String should look like "1.4.2_10" if (javaVersion.contains("1.8.")) { majorJavaVersion = JAVA_18; }else if (javaVersion.contains("1.7.")) { majorJavaVersion = JAVA_17; } else if (javaVersion.contains("1.6.")) { majorJavaVersion = JAVA_16; } else { // else leave 1.5 as default (it's either 1.5 or unknown) majorJavaVersion = JAVA_15; } } /** * Return the full Java version string, as returned by * <code>System.getProperty("java.version")</code>. * @return the full Java version string * @see System#getProperty(String) */ public static String getJavaVersion() { return javaVersion; } /** * Get the major version code. This means we can do things like * <code>if (getMajorJavaVersion() < JAVA_14)</code>. * @return a code comparable to the JAVA_XX codes in this class * @see #JAVA_13 * @see #JAVA_14 * @see #JAVA_15 * @see #JAVA_16 * @see #JAVA_17 */ public static int getMajorJavaVersion() { return majorJavaVersion; } /** * Convenience method to determine if the current JVM is at least Java 1.4. * @return <code>true</code> if the current JVM is at least Java 1.4 * @deprecated as of Spring 3.0 which requires Java 1.5+ * @see #getMajorJavaVersion() * @see #JAVA_14 * @see #JAVA_15 * @see #JAVA_16 * @see #JAVA_17 */ @Deprecated public static boolean isAtLeastJava14() { return true; } /** * Convenience method to determine if the current JVM is at least * Java 1.5 (Java 5). * @return <code>true</code> if the current JVM is at least Java 1.5 * @deprecated as of Spring 3.0 which requires Java 1.5+ * @see #getMajorJavaVersion() * @see #JAVA_15 * @see #JAVA_16 * @see #JAVA_17 */ @Deprecated public static boolean isAtLeastJava15() { return true; } /** * Convenience method to determine if the current JVM is at least * Java 1.6 (Java 6). * @return <code>true</code> if the current JVM is at least Java 1.6 * @deprecated as of Spring 3.0, in favor of reflective checks for * the specific Java 1.6 classes of interest * @see #getMajorJavaVersion() * @see #JAVA_16 * @see #JAVA_17 */ @Deprecated public static boolean isAtLeastJava16() { return (majorJavaVersion >= JAVA_16); } }