SpringMVC+Spring+MyBatis学習ノート:SpringMVCとSpringが一緒に仕事をしている場合、AOPトランザクション管理が機能しない解決方法

2524 ワード

システム:WIN 8.1
データベース:Oracle 11 GR 2
開発ツール:MyEclipse 8.6
フレーム:Spring 3.2.9、SpringMVC3.2.9、MyBatis3.2.8
SpringMVCのspringmvc.xmlファイルにスキャンパッケージを構成し、serviceの注釈を含まないでください.Springのプロファイルプロファイルパッケージをスキャンする場合、controllerの注釈を含まないでください.以下に示します.
 
Spring MVCのプロファイル:
<context:component-scan base-package="   ">

  <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>

</context:component-scan> 

 
Springのプロファイル:
1 <context:component-scan base-package="   ">           
2 
3  <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
4 
5 </context:component-scan>

Spring MVC起動時のプロファイルには、コンポーネントスキャン、urlマッピング、およびfreemarkerパラメータの設定が含まれており、springが@Service注記のあるクラスをスキャンしないようにします.
Why?
なぜならspringmvc.xmlとアプリケーションContext.xmlは同時ロードではありません.このような設定を行わないと、Springは@Service注釈付きのクラスをすべてコンテナにスキャンし、アプリケーションContextがロードされるまで待機します.xmlの場合、コンテナにすでにサービスクラスが存在するため、cglibはサービスをエージェント化しないため、アプリケーションContextのトランザクション構成が機能せず、異常が発生した場合、データをロールバックできない結果になります.