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