nay*_*yef 13 spring transactions spring-transactions
从春季参考文档
Spring建议您只使用@Transactional注释来注释具体类(以及具体类的方法),而不是注释接口.您当然可以将@Transactional注释放在接口(或接口方法)上,但这只能在您使用基于接口的代理时按预期工作.Java注释不是从接口继承的事实意味着如果您使用基于类的代理(proxy-target-class ="true")或基于编织的方面(mode ="aspectj"),那么事务设置是代理和编织基础设施无法识别,并且该对象不会被包装在事务代理中,这将是非常糟糕的.
虽然它只涉及接口,但抽象类也被认为是非具体的.
所以,如果我有一个抽象类
public abstract class BaseService{
//here is a concrete method
@Transactional
public void updateData{
//do stuff using dao layer
}
Run Code Online (Sandbox Code Playgroud)
以及扩展该类的具体类
public class SpecialService extends BaseService{
//body of class
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我specialService.updateData()
从我的控制器类调用它将是事务性的吗?
geo*_*and 14
授予你实际上已经正确配置Spring的事务管理,使用@Transactional
上的抽象超会工作,因为@Transactional
本身带有加注解@Inherited
,并从它的Javadoc中,我们有:
表示自动继承注释类型.如果注释类型声明中存在Inherited元注释,并且用户在类声明上查询注释类型,并且类声明没有此类型的注释,则将自动查询类的超类以获取注释类型.将重复此过程,直到找到此类型的注释,或者到达类层次结构(对象)的顶部.如果没有超类具有此类型的注释,则查询将指示相关类没有此类注释.
请注意,如果使用带注释的类型来注释除类之外的任何内容,则此元注释类型不起作用.另请注意,此元注释仅导致注释从超类继承; 已实现接口上的注释无效.
要实际看到它@Transactional
的注释,@Inherited
请查看它的Javadoc
归档时间: |
|
查看次数: |
5762 次 |
最近记录: |