【发布时间】:2015-05-15 16:08:47
【问题描述】:
试图收集和理解@Transactional注解的要点,越过了一个点。因此,我们在使用 Transactional annotation 时需要牢记的主要事项是:
- 事务注解只能应用于公共方法[根据Does Spring @Transactional attribute work on a private method?
- 事务注释应该应用于具体类而不是接口[根据Where should I put @Transactional annotation: at an interface definition or at an implementing class?
- 事务性注释应该应用在服务级别[根据Spring @Transactional Annotation Best Practice
- 如果你想在整个类被注释时排除一些公共方法被 Transactional 注释,你可以使用一些传播策略 [根据Transactional annotation on whole class + excluding a single method
不幸的是,我没有找到问题的答案:将事务注释放在类或方法中更好吗?我们可以考虑不同的情况,但主要是我对一个当我们有几个方法必须有这个注解而一些没有的时候。
另外,也许您想在此列表中添加一些积分,那真的很棒。
【问题讨论】:
-
1 不再是真的,而且已经有一段时间了。如果您使用 Spring 的编织支持(编译时或加载时),则注释可以在 any 方法上。
-
好吧,如果您的某些方法不需要该注释,这意味着如果我让您正确的话,您根本不需要事务。那么,如果您在课堂上声明事务,为什么还要通过注释打开事务呢?我建议只在需要事务的所有方法上编写该注释。
-
@BoristheSpider,这是一个有趣的事实,谢谢。
-
@Jan,这就是重点。如果我有很多需要事务性的方法,如果我将事务性注释放在所有这些方法而不是类上,我觉得这是一种重复的代码。我只是在猜测将它放到类中是否不好,即使其他一些方法不需要事务。
-
在这种情况下,代码重复无关紧要。恕我直言,在您的情况下,交易不应被视为横切关注点,因为有时不需要它们。从更一般的意义上说,我总是会避免在类级别上进行事务注释,并定义方法来执行您在事务中需要做的事情,这将有利于关注点和可测试性的明确分离
标签: java spring transactions