0

我对事务配置子类化有疑问。

我有一个具有此方法的 A 类:

@Override
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public EventMessage<ModificaOperativitaRapporto> activate(EventMessage<ModificaOperativitaRapporto> eventMessage) {
// some dao operations
        return eventMessage;
    }

然后B类子类A并覆盖activate方法

 InserimentoCanaleActivator extends ModificaOperativitaRapportoActivator ....

    @Override
        @Transactional(propagation = Propagation.REQUIRES_NEW)
        public EventMessage<ModificaOperativitaRapporto> activate(EventMessage<ModificaOperativitaRapporto> eventMessage) {
// others dao operations 
    return super.activate(eventMessage);

我需要单独执行超级方法时有自己的事务,但是当执行B类的方法时,所有操作都需要参与同一个事务。

任何想法?

4

1 回答 1

1

事务将整个方法调用包装在 bean 中,但它是在 bean 级别应用的,而不是在方法的单个类实现级别应用。基本上,Spring 使用 AOP 处理事务。这样做是将代理对象作为 bean 本身。代理管理事务的开始,在您的实现类中运行方法,然后在再次退出的过程中完成事务(提交或回滚)。这是一种优雅的方法,并且比任何手动方法都简单得多(鉴于 Java 的限制)。

代理机制一旦被应用(通过@Transactional注释的存在加上一些其他配置),就会查看要执行的事务处理的类型(propagation注释的参数)并选择正确的操作。在您的情况下,如果您希望拥有超类@Transactional(propagation=REQUIRES_NEW)和拥有子类,@Transactional(propagation=REQUIRED)那么我希望它可以工作;超类的注释将被忽略,因为注释机制将首先看到子类的注释并停止查找。

于 2011-08-05T10:18:18.760 回答