事务管理器 Spring 4 hibernate 4 NoSuchMethodError

3
我正在尝试在Spring中使用基于注释的事务管理,这是我的Spring配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xmlns="http://www.springframework.org/schema/beans" 
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:p="http://www.springframework.org/schema/p"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"



        xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            ">


    <bean id="dataSource" 
            class="org.apache.commons.dbcp.BasicDataSource" 
            depends-on="propertyPlaceholderConfigurer"
            p:driverClassName="org.postgresql.Driver"
            p:url="${db.url}" 
            p:username="${db.username}" 
            p:password="${db.password}" />


    <context:spring-configured />

    <bean id="sessionFactory" 
            class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" 
            depends-on="flywayAutomaticMigrationBean">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan" value="com.example" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
                <prop key="hibernate.show_sql">false</prop>
                <prop key="hibernate.default_schema">restProj</prop>
            </props>
        </property>

        <property name="mappingResources">
            <list>
                <value>com/example/db/hbm/user/User.hbm.xml</value>
                <value>com/example/db/hbm/user/Role.hbm.xml</value>
                <value>com/example/db/hbm/user/Feature.hbm.xml</value>

            </list>
        </property>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager" />
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean> 

</beans>

当我运行我的项目时,我得到了这个错误信息:
Caused by: java.lang.NoSuchMethodError: org.springframework.aop.config.AopNamespaceUtils.registerAutoProxyCreatorIfNecessary(Lorg/springframework/beans/factory/xml/ParserContext;Ljava/lang/Object;)V
at org.springframework.transaction.config.AnnotationDrivenBeanDefinitionParser.parseInternal(AnnotationDrivenBeanDefinitionParser.java:54)
at org.springframework.beans.factory.xml.AbstractBeanDefinitionParser.parse(AbstractBeanDefinitionParser.java:60)
at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:74)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1424)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1414)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:187)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:141)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:110)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:508)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391)
... 28 more

我阅读了这个答案,但我不想降级我的Spring版本。

非常感谢任何帮助。

____更新____ 这是我的jar包列表:

    antlr-2.7.7.jar
aopalliance-repackaged-2.2.0.jar
asm-all-repackaged-2.2.0.jar
aspectjtools-1.7.4.jar
c3p0-0.9.1.2.jar
cas-client-core-3.2.1.jar
cas-client-integration-tomcat-common-3.2.1.jar
cas-client-integration-tomcat-v6-3.2.1.jar
cas-client-support-distributed-ehcache-3.2.1.jar
cas-client-support-distributed-memcached-3.2.1.jar
cglib-2.1.88.jar
commons-codec-1.6.jar
commons-collections.jar
commons-collections4-4.0.jar
commons-dbcp-1.4.jar
commons-exec-1.1.jar
commons-fileupload.jar
commons-io.jar
commons-lang-2.5.jar
commons-logging-1.1.3.jar
commons-pool-1.5.4.jar
dbunit-2.4.9.jar
dom4j-1.6.jar
ehcache-core-2.2.0.jar
flyway-core-3.0.jar
hamcrest-core-1.3.jar
hibernate-commons-annotations-4.0.4.Final.jar
hibernate-core-4.3.5.Final.jar
hibernate-entitymanager-4.3.5.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
HibernatePagedList-2.0.jar
hk2-api-2.2.0.jar
hk2-locator-2.2.0.jar
hk2-utils-2.2.0.jar
jackson-annotations-2.2.3.jar
jackson-core-2.2.3.jar
jackson-databind-2.2.3.jar
jackson-jaxrs-base-2.2.3.jar
jackson-jaxrs-json-provider-2.2.3.jar
jandex-1.1.0.Final.jar
javassist-3.18.1-GA.jar
javax.annotation-api-1.2.jar
javax.inject-2.2.0.jar
javax.servlet-api-3.0.1.jar
javax.ws.rs-api-2.0.jar
jaxb-api-2.2.7.jar
jboss-logging-3.1.3.GA.jar
jboss-logging-annotations-1.2.0.Beta1.jar
jboss-transaction-api_1.2_spec-1.0.0.Final.jar
jersey-client.jar
jersey-common.jar
jersey-container-servlet-core.jar
jersey-container-servlet.jar
jersey-guava-2.6.jar
jersey-server.jar
jersey-spring3-2.6.jar
jta-1.0.1B.jar
juli-6.0.29.jar
junit-4.11.jar
log4j-1.2.15.jar
odmg-3.0.jar
org.osgi.core-4.2.0.jar
osgi-resource-locator-1.0.1.jar
PagedListApi-2.0.jar
persistence-api-1.0.jar
postgresql-8.4-703.jdbc4.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
spring-aop-4.0.2.RELEASE.jar
spring-aspects-4.0.2.RELEASE.jar
spring-beans-4.0.2.RELEASE.jar
spring-bridge-2.2.0-b14.jar
spring-context-4.0.2.RELEASE.jar
spring-context-support-4.0.2.RELEASE.jar
spring-core-4.0.2.RELEASE.jar
spring-dao-2.0.8.jar
spring-expression-4.0.2.RELEASE.jar
spring-instrument-4.0.2.RELEASE.jar
spring-instrument-tomcat-4.0.2.RELEASE.jar
spring-jdbc-4.0.2.RELEASE.jar
spring-orm-4.0.2.RELEASE.jar
spring-security-acl-3.2.1.RELEASE.jar
spring-security-cas-3.2.1.RELEASE.jar
spring-security-config-3.2.1.RELEASE.jar
spring-security-core-3.2.1.RELEASE.jar
spring-security-ldap-3.2.1.RELEASE.jar
spring-security-openid-3.2.1.RELEASE.jar
spring-security-taglibs-3.2.1.RELEASE.jar
spring-security-web-3.2.1.RELEASE.jar
spring-tx-4.0.2.RELEASE.jar
spring-web-4.0.2.RELEASE.jar
validation-api-1.1.0.Final.jar
xml-apis-1.4.01.jar
xmlsec-1.3.0.jar

看起来你在编译和运行时使用了不同版本的spring-aop jar包。你能检查一下吗? - Jens
我该如何检查这个问题?我总是在测试之前清理我的项目并重新构建它。 - littleali
你是在Eclipse中运行还是在Web服务器上运行?能展示一下使用的JAR包吗? - Jens
检查一下你的jar包@littleali,如果源代码在你的IDE中可用,你可以检查一下这个方法是否真的存在。 - Ker p pag
@littleali,你能否更新一下问题,告诉我们你正在使用哪些Spring依赖项? - geoand
假设您正在使用Maven,请使用“mvn dependency:tree”获取所有依赖项的列表。我怀疑您的应用程序中有一个旧版本的spring-aop jar(由于传递依赖关系),与其他jar不兼容。通常情况下,不要混合使用任何框架的不同版本的jar包。 - M. Deinum
2个回答

4

您需要使用相同版本的Spring框架。

您大部分依赖项都是Spring的4版本,但您还有 spring-dao-2.0.8.jarspring-bridge-2.2.0-b14.jar

请删除这些依赖项,然后它应该可以正常工作。


Spring-dao 的最新版本是 2.0.8。 - littleali
@littleali彻底删除它! - geoand
谢谢,错误已经解决,但我的@transactional方法没有改变数据库。 - littleali
@littleali 很高兴听到它正在工作!你应该尝试进一步调试事务问题,如果你无法解决它,可以开始一个新的SO问题。 - geoand

0

我以前读过这个。我使用了Maven来获取JAR包,但是它没有起作用。 - littleali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接