我就是无法理解。 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) {
}
}
最佳答案
问题很可能是您的 @Transactional
带注释的类位于 servlet 上下文中。如果您有<context:component-scan>
,则可能会发生这种情况在 servlet 应用程序上下文配置中,而 Spring AOP 拦截器在根应用程序上下文中配置。
解决办法是移动@Service
带注释的类到根 Web 应用程序应用程序上下文。
参见Spring @Transactional not working 。
Servlet 和 Web App Root 上下文之间的区别: Difference between applicationContext.xml and spring-servlet.xml in Spring Framework .
关于spring - spring注解配置中的@Transaction和@Service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11848716/