【问题标题】:@Transaction with @Service in spring annotation configuration在spring注解配置中使用@Service的@Transaction
【发布时间】:2012-08-04 15:07:39
【问题描述】:

我只是无法理解。带有@Serviced 标记并由@ComponentScan 在应用程序上下文中注册的bean 是否通过@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) {

    }

}

【问题讨论】:

  • ComponentScan 注解用于@Configuration 类。你的应用上下文中有 context:component-scan 吗?
  • 我的配置是基于注释的,我在标记为 \@Configuration 的类中应用 \@ComponentScan。服务已创建,但事务支持不起作用。
  • 当您使用第二种方法并尝试从上下文中获取您的 LocationManager 时,您有一个吗?它是否存在但只是没有代理交易?还是完全丢失了?
  • 你是如何引导@Configuration 类的?
  • @jeff 没有丢失,没有代理交易。

标签: spring configuration transactions annotations


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 2011-04-24
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多