@Transactional和继承

时间:2013-05-26 18:39:18

标签: java spring inheritance transactions

我曾经向所有spring服务(类)添加@Transactional注释。然后我想:如果交易行为应该是一样的话,我真的必须这样做吗? (当然,如果它不应该,我们会将@Transational与其他参数一起添加到方法中。)我尝试使用@Transactional找到有关继承的一些有用信息,请阅读@Inherited (看起来@Transactional@Inherited)。我为以下示例尝试了rollbackFornoRollbackFor,看起来@Transactional中的GenericService适用于doSmthSpecific

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

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

如果GenericService是一个界面,我想it wouldn't work。我想它更像是"如果我错了,请纠正我"问题,我想知道是否真的可以将@Transactional添加到超类中,如果我在这里遗漏了一些内容。我们将非常感谢您的详细解释(或此类解释的链接)。

1 个答案:

答案 0 :(得分:2)

引用docs

  

您可以在接口定义,接口上的方法,类定义或类上的公共方法之前放置@Transactional注释...

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

  

Spring建议您只使用@Transactional注释来注释具体类(以及具体类的方法),而不是注释接口。您当然可以将@Transactional注释放在接口(或接口方法)上,但这只能在您使用基于接口的代理时按预期工作。

稍后他们会继续解释当你使用基于类的代理或aspectj编织时它不起作用。