解决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再覆盖到项目中。

posted @ 2021-09-10 09:40  O。O  阅读(466)  评论(0)    收藏  举报