在Spring注释配置中使用@Service的@Transaction

时间:2012-08-07 14:58:36

标签: spring configuration transactions annotations

我真的无法理解。 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) {

    }

}

1 个答案:

答案 0 :(得分:3)

问题可能是您的@Transactional带注释的类位于servlet上下文中。如果在servlet应用程序上下文配置中有<context:component-scan>,而在根应用程序上下文中配置了Spring AOP拦截器,则可能会发生这种情况。

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

Spring @Transactional not working

Servlet和Web App Root上下文之间的区别: Difference between applicationContext.xml and spring-servlet.xml in Spring Framework