spring - spring注解配置中的@Transaction和@Service

标签 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) {

    }

}

最佳答案

问题很可能是您的 @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/

相关文章:

java - spring java配置环境变量

mysql 事务隔离级别示例

java - 在 Spring-boot 中设置默认 Activity 配置文件

java - http GET 失败,出现错误 javax.net.ssl.SSLHandshakeException : sun. security.validator.ValidatorException:PKIX 路径构建失败

spring - 避免延迟初始化,除了空集合的推土机映射之外

java - 如何使用 Spring 3.0 表达式语言参数化 @Scheduled(fixedDelay)?

configuration - log4j2 相当于 log4j.defaultInitOverride

asp.net - SQL Server 2005 : Transaction Deadlock

Redis事务和watch命令

java - 如何获取 Spring Restful Web 服务中请求正文中发送的字符串?