3

我只是无法理解。bean 是否用@Serviced 标记并由@ComponentScan 在应用程序上下文中注册,是否通过@Transaction 注释代理事务支持?

这工作正常:

    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注释类位于 servlet 上下文中。如果您<context:component-scan>在 servlet 应用程序上下文配置中配置了 Spring AOP 拦截器,则可能会发生这种情况,而在根应用程序上下文中配置了 Spring AOP 拦截器。

解决方案是将@Service带注释的类移动到根 Web 应用程序上下文。

请参阅Spring @Transactional not working

Servlet 和 Web App Root 上下文的 区别: Spring Framework 中 applicationContext.xml 和 spring-servlet.xml 的区别

于 2012-08-09T07:51:36.947 回答