Spring Dao 和Spring Tx沖突導致在配置注解事務時產生NoSuchMethodError

在搭建SSM環境的時候配置了注解事務

<!-- 事務管理器 -->
    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

然后啟動項目出現 NoSuchMethod錯誤。根據給出的類路徑找了一下發現有org.springframework.aop.config.AopNamespaceUtils.registerAutoProxyCreatorIfNecessary這個方法在Spring-tx包中。查看調用這個方法出錯的地方是在Spring dao包中的類AnnotationDrivenBeanDefinitionParser。再找這個AnnotationDrivenBeanDefinitionParser類發現有兩個同樣的類定義,一個在Spring-tx里面,一個在Spring-dao里面。
接下來嘗試把Spring-dao包從maven依賴里面注釋掉,啟動成功。這下大概明白是這兩個包沖突了,繼續深入查看源碼發現在TxNamespaceHandler(在Spring tx包里面)中有如下代碼

registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenBeanDefinitionParser());

我想是classloader把來自來自Spring dao包中的AnnotationDrivenBeanDefinitionParser給實例化了,從而導致的錯誤。
最后解決辦法,去掉Spring-dao的maven依賴。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容