试图收集和理解@Transactional注释的要点并克服了一点.因此,使用Transactional注释时我们需要记住的主要事项是:
>交易注释只能应用于公共方法[根据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]
不幸的是我找不到问题的答案:将Transactional注释放到类或方法中哪个更好?我们可以考虑不同的情况,但是当我们有几个必须有这个注释的方法而一些不需要时,我很感兴趣.
另外,也许你想在这个列表中添加一些点,这真的很棒.
最佳答案 以下列出了我能想到的专业人士和(隐含的)缺点.
专业方法等级:
>易于阅读:你看一个方法,可以告诉它它是事务性的,而不必查看类,它实现的接口或超类.
>明确:注释清楚地告诉您该方法是交易性的.它不仅仅是事务性的,因为类中的所有方法都是事务性的.
>减少意外合并(否则)独立事务:如果从(隐式)事务方法调用多个事务方法,则外部事务定义整个事务(除非传播设置类似于REQUIRES_NEW).虽然这在很多情况下都没有问题,但从长远来看,我已经看到项目因此而陷入严重困境.特别是当涉及悲观锁定时,保持事务尽可能独立和小,这是至关重要的,因此事务只需要很少的锁,并且锁会尽快释放.
专业级别:
>重复性较低:如果将注释放在类级别上,则不必为每个事务方法添加注释.有些人认为在每种交易方法上加上注释是违反DRY原则的.但是,恕我直言,如果这是反对DRY原则,那么Java的私有/受保护/公共修饰符也是如此.