Java 把@Transactional放在哪里?在接口规范或实现中?
放置Java 把@Transactional放在哪里?在接口规范或实现中?,java,spring,interface,transactions,Java,Spring,Interface,Transactions,放置@Transactional注释的最佳实践是什么?我应该注释接口方法还是实现?好问题。我总是把它放在实现中。也许是因为它是一个实现细节,而不是一个抽象 您可能希望不同的实现具有不同的事务行为 El Guapo指出,除此之外,在接口上添加代理策略可能会产生更多问题。我认为,这实际上取决于您的应用程序架构。这取决于你如何代理你的类。如果将应用程序设置为proxy target class='true'(在应用程序上下文中,如果对界面进行注释,则不会获取@Transactional信息 查看更多信
@Transactional
注释的最佳实践是什么?我应该注释接口方法还是实现?好问题。我总是把它放在实现中。也许是因为它是一个实现细节,而不是一个抽象
您可能希望不同的实现具有不同的事务行为
El Guapo指出,除此之外,在接口上添加代理策略可能会产生更多问题。我认为,这实际上取决于您的应用程序架构。这取决于你如何代理你的类。如果将应用程序设置为
proxy target class='true'
(在应用程序上下文中,如果对界面进行注释,则不会获取@Transactional
信息
查看更多信息
Spring建议您仅使用@Transactional注释对具体类(以及具体类的方法)进行注释,而不是对接口进行注释。您当然可以将@Transactional注释放置在接口(或接口方法)上,但这仅在使用基于接口的代理时才起作用。Java注释不是从接口继承的事实意味着如果使用基于类的代理(proxy target class=“true”)或基于编织的方面(mode=“aspectj”),则代理和编织基础结构无法识别事务设置,并且对象不会包装在事务代理中,这将是非常糟糕的
虽然事务管理在很多情况下都是实现细节,但通常它也是一个接口细节。例如,在定义应用程序的服务接口时,可以考虑将“代码> @事务性< /代码>放入接口定义中,以明确地说明您使用的传播策略。 < P>我不u。在我的系统上安装se接口,因为到目前为止,我还不知道是否有可能在上面实现任何东西。所以我在实现上添加了注释,我相信Spring会让一切都对我正确 我不认为所有的类都必须有接口。我看到很多架构都有很多模式,它们都喜欢接口。但有一个问题:如果你把Spring注释放到接口中,出于某种原因,你想用另一种方法来处理实现类在这个接口上的事务,你就不能这样做哦,那是我错了吗
干杯。提出了另一个非常好的观点。评论不错!有人知道JTA规范对注释的说明吗?提供者必须检查注释的超类型方法签名吗?更重要的是,如果用非注释版本覆盖注释方法,注释处理器/反射会如何理解提示?+1。我正在编辑您的答案以添加报价