javax.transaction.Transactional vs org.springframework.transaction.annotation.Transactional

2022-08-31 06:11:09

我不明白注释和?javax.transaction.Transactionalorg.springframework.transaction.annotation.Transactional

它们的扩展或它们是否具有完全不同的含义?何时应使用它们中的每一个?服务层的春天和DAO中的javaxorg.springframework.transaction.annotation.Transactionaljavax.transaction.Transactional@Transactinal

感谢您的回答。


答案 1

几年前,Spring已经定义了自己的事务注释,以使Spring Bean方法具有事务性。

Java EE 7终于做了同样的事情,现在除了EJB方法之外,还允许CDI Bean方法是事务性的。因此,从Java EE 7开始,它还定义了自己的事务注释(它显然不能重用Spring注释)。

在 Java EE 7 应用程序中,您将使用 Java EE 注释。

在 Spring 应用程序中,您将使用 Spring 注释。

它们的用途是相同的:通知容器(Java EE或Spring)一种方法是事务性的。


答案 2

另一个区别是Spring如何处理@Transactional注释

  • org.springframework.transaction.annotation.Transactional 总是被考虑在内
  • javax.transaction.Transactional 仅在存在 EJB3 事务时才会被考虑在内。EJB3 事务的存在是通过检查类在类路径中是否可用(从版本 2.5.3 到 3.2.5)来完成的。因此,如果只是在类路径中而不是 ,则最终可能会不考虑注释。如果您使用的是Hibernate,则可能是这种情况:hibernate-core(4.3.7.Final)依赖于jboss-transaction-api_1.2_spec(1.0.0.Final),它不提供.javax.ejb.TransactionAttributejavax.transaction.Transactionaljavax.ejb.TransactionAttributejavax.ejb.TransactionAttribute

推荐