3

私は理解できません。Bean は @Serviced でマークされ、@Transaction アノテーションを介してトランザクション サポートのためにプロキシされる @ComponentScan によってアプリケーション コンテキストに登録されますか?

これはうまくいきます:

    public class LocationManagerImpl implements LocationManager {

        @Transactional
        public void saveLocation(Location location) {

        }

    }

//config class

@Bean
public LocationManager locationManager() {
    return new LocationManagerImpl();
}

これはしません:

@Service
public class LocationManagerImpl implements LocationManager {

    @Transactional
    public void saveLocation(Location location) {

    }

}
4

1 に答える 1

3

問題は、@Transactional注釈付きのクラスがサーブレット コンテキストにある可能性があります。<context:component-scan>これは、Spring AOP インターセプターがルート アプリケーション コンテキストで構成されているときに、サーブレット アプリケーション コンテキスト構成にある場合に発生する可能性があります。

@Service解決策は、注釈付きクラスをルート Web アプリ アプリケーション コンテキストに移動することです。

Spring @Transactional が機能しないを参照してください。

サーブレットと Web アプリのルート コンテキストの 違い: Spring Framework の applicationContext.xml と spring-servlet.xml の違い

于 2012-08-09T07:51:36.947 に答える