3

我曾经为所有 Spring 服务(类)添加@Transactional注释。然后我想:我真的必须这样做吗,如果交易行为应该是一样的?(当然,如果不应该,我们会@Transational在方法中添加其他参数。)我试图找到一些关于继承的有用信息@Transactional,阅读@Inherited(它看起来像@Transactionalis @Inherited)。我对以下示例进行了实验,它看起来rollbackFor像是在为.noRollbackFor@TransactionalGenericServicedoSmthSpecific

@Transactional
public abstract class GenericService {
    public void doSmthGeneric() {
    }
}

public class SpecificService extends GenericService {
    public void doSmthSpecific() {
    }
}

如果GenericService是接口,我认为它不起作用。我想这更像是“如果我错了,请纠正我”的问题,我想知道@Transactional仅添加到超类是否真的可以,以及我是否在这里遗漏了一些东西。将不胜感激详细的解释(或此类解释的链接)。

4

1 回答 1

2

引用文档

您可以将@Transactional 注解放在接口定义、接口上的方法、类定义或类上的公共方法之前...

他们还建议不要注释接口/接口方法。

Spring 建议您仅使用 @Transactional 注释来注释具体类(和具体类的方法),而不是注释接口。您当然可以将@Transactional 注释放在接口(或接口方法)上,但这仅在您使用基于接口的代理时才起作用。

后来他们继续解释说,当您使用基于类的代理或 aspectj 编织时,它不起作用。

于 2013-05-26T18:51:34.100 回答