Caused by: java.lang.NoSuchMethodError: org.springframework.aop.config.AopNamespaceUtils.registerAutoProxyCreatorIfNecessary
在搭建springMVC+iabtis框架的时候,碰到的问题。
1.首先搭建的是spring4+ibatis
在pom中添加了spring4的核心包之后,加入的ibatis的jar包是:ibatis-sqlmap(2.3.4.726)和spring-ibatis(2.0.8)。
加入spring-ibatis这个jar包的原因是spring4的orm这个jar包中没有集成对ibatis的支持。直接导致的一个错就是缺少SqlMapClientDaoSupport这个类。
2.后来搭建的是spring3+ibatis
spring3对于ibatis有很好的集成。
问题描述
其实类似于NoSuchMethodError这种错误,最有可能的就是jar包引入版本的问题,或者是jar包冲突。
可以通过maven看一下jar包的树结构,看看jar包之后的依赖关系。
如果说确实是jar包缺少,导入jar包即可,比如说Caused by: java.lang.NoSuchMethodError: org.springframework.aop.xxxxx.xxxxx.这个问题,我会先去寻找项目中所依赖的jar包中有没有该jar包存在,再找有没有该类,该方法。如果没有,你通过pom(maven的配置文件)文件添加依赖即可。如果有该类存在,那么很可能是jar包冲突。
关于jar包冲突,举个很简单的例子,如果你引用了A.jar包和B.jar包,并且A和B都依赖于C.jar包。但是,A依赖于1.1版本的C.jar包,B依赖于2.1版本的jar包,如果此时你的项目中存放的是1.1版本的,那么很有可能会报错。
如何解决问题
类似的问题还有:
java.lang.NoSuchMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext....
等等,通过这种异常可以看出自己缺少哪个jar包,如上,可能缺少的是javax.servlet.jsp这个jar包。
备注
我在搭建spring4和ibatis的时候,其实项目可以跑起来,但是是在不配置注解式事务的前提下。
如果我添加了该配置,就会包如标题所示的错误,但是该jar包以及该类是确定存在的,后来我把问题归结为:spring-ibatis中所依赖的spring的jar包版本与spring4有冲突。
spring3+ibatis的核心pom配置
其实有些jar包通过依赖关系,maven会自动导入,可不必自己添加。
<!-- springjar包版本 -->
<spring.version>3.0.4.RELEASE</spring.version>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.apache.ibatis</groupId>
<artifactId>ibatis-sqlmap</artifactId>
<version>2.3.4.726</version>
</dependency>
spring4+ibatis的核心pom配置
笔者在配置声明式事务的时候,会报错,如果有大哥知道如何配置,请指点一下,十分感谢。
<!-- springjar包版本 -->
<spring.version>4.1.2.RELEASE</spring.version>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- ibatis -->
<dependency>
<groupId>org.apache.ibatis</groupId>
<artifactId>ibatis-sqlmap</artifactId>
<version>2.3.4.726</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-ibatis</artifactId>
<version>2.0.8</version>
</dependency>