解决AOP+JDK1.8异常 AnnotationAwareAspectJAutoProxyCreator is only available on Java 1.5 and higher
问题描述:
本地是Spring2.X和JDK1.6的开发环境,平时开发运行测试没有问题,部署到正式环境时一直异常
Caused by: java.lang.IllegalStateException: AnnotationAwareAspectJAutoProxyCreator is only available on Java 1.5 and higher at org.springframework.aop.config.AopNamespaceUtils.getAspectJAutoProxyCreatorClassIfPossible(AopNamespaceUtils.java:145) at org.springframework.aop.config.AopNamespaceUtils.registerAtAspectJAutoProxyCreatorIfNecessary(AopNamespaceUtils.java:95) at org.springframework.aop.config.AspectJAutoProxyBeanDefinitionParser.parse(AspectJAutoProxyBeanDefinitionParser.java:41) at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:69) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1123) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1113) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:133) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:90) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:468) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:363) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:313) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:290) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:131) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:147) 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:101) at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:394) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:324) at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:246) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:189) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49) ....................
找了好长时间,发现是一行检测jdk版本的地方有问题,spring2.x不支持jdk1.8以上。看看源码:

再找到JdkVersion这个类。

发现最高只支持jdk1.7。
找到问题就好办了。
1:首先,我们在项目中新建一个包(package),包名:org.springframework.core;
2:然后,我们在新建的包下面新建一个Java类(class),类名JdkVersion.java;
3:编辑新建的类:
`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 getMajorJavaVersion() >= 1;
}
public static boolean isAtLeastJava15() {
return getMajorJavaVersion() >= 2;
}
public static boolean isAtLeastJava16() {
return getMajorJavaVersion() >= 3;
}
public static boolean isAtLeastJava17() {
return getMajorJavaVersion() >= 4;
}
public static boolean isAtLeastJava18() {
return getMajorJavaVersion() >= 5;
}
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 if (javaVersion.indexOf("1.4.") != -1) {
majorJavaVersion = 1;
} else {
majorJavaVersion = 0;
}
}
}`
4:编辑完类以后,找到项目路径:WEB-INF/classes;找到对应package中的.class文件;
即:org.springframework.core 包下的JdkVersion.class文件。
5:将项目中的spring.jar拷贝出来打开,然后将JdkVersion.class替换jar包中的该文件。
6:将修改后的spring.jar再覆盖到项目中。

浙公网安备 33010602011771号