Java @事务和继承

Java @事务和继承,java,spring,inheritance,transactions,Java,Spring,Inheritance,Transactions,我曾经向所有spring服务(类)添加@Transactional注释。然后我想:如果交易行为应该是一样的,我真的必须这样做吗?(当然,如果不应该的话,我们会在方法中添加带有其他参数的@Transational)我试图通过@Transactional找到一些关于继承的有用信息,阅读@Inherited(看起来@Transactional是@Inherited)。在下面的示例中,我尝试了rollboor和norollboor,它看起来像GenericService中的@Transactional为

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

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

public class SpecificService extends GenericService {
    public void doSmthSpecific() {
    }
}
如果
GenericService
是一个接口,我想。我想这更像是“如果我错了就纠正我”的问题,我想知道是否可以只向超类添加
@Transactional
,以及我是否遗漏了什么。如能提供详细解释(或此类解释的链接),将不胜感激。

引用

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

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

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

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