Spring 事务注解 应该声明在哪里更合适?

问题描述

Spring  事务注解 应该声明在哪里更合适? ==================示例代码=======================// 作为简化操作Service直接继承了DAO的操作。 // 父类public abstract class BaseDaoImpl<T> implements BaseDao<T>{public void save(T entity){ /* 具体实现 */ }public void delete(Long id) { /* 具体实现 */ }public void findById(Long id) { /* 具体实现 */ }}// 子类public class RoleServiceImpl extends BaseDaoImpl<Role>{}  方法(1):直接在父类(BaseDaoImpl) 中 声明事务注解  @Transactionalpublic abstract class BaseDaoImpl<T> implements BaseDao<T>{@Transactional(propagation=Propagation.NOT_SUPPORTED) public void delete(Long id) { /*具体实现*/ }}  方法(2):在父类中不进行事务注解,在子类(RoleServiceImpl)中 声明事务注解 @Transactionalpublic class RoleServiceImpl extends BaseDaoImpl<Role>{@Transactional(propagation=Propagation.NOT_SUPPORTED) public void delete(Long id) { super.delete(id) }} 请问对于上面2钟方法,哪种比较稳妥。  按照:Spring团队的建议是你在具体的类(或类的方法)上使用 @Transactional 注解,而不要使用在类所要实现的任何接口上,那么是不是 第(2)钟方法更合适。

解决方案

是第二种方法更合适,虽然@Transactional注解可以被应用于几口定义和接口方法、类定义和类的public方法上,如果定义在接口上的话,会留下隐患,因为注解不能被继承,所以业务接口中标注的@Transactional注解不会被业务实现类继承的,子类是不会启用食物机制的
解决方案二:

时间: 2024-10-22 12:10:45

Spring 事务注解 应该声明在哪里更合适?的相关文章

spring事务注解@Transactional事务不回滚

问题描述 spring事务注解@Transactional事务不回滚 如题: public interface A { public void A(); } public class B implements A{ public void A(){ B();} @Transactional public void B(){ //删除数据 //两者之前发生异常了... //添加数据 } } 如果将@Transactional注解放在某一service实现类的某一非入口方法,发现数据不会回滚,请问大

【浅谈JavaEE框架】Spring常用注解,自动扫描装配Bean

1.引入context命名空间(在Spring的配置文件中) 配置文件如下:  Xml代码   1.xmlns:context="http://www.springframework.org/schema/context"     2.http://www.springframework.org/schema/context   3.http://www.springframework.org/schema/context/spring-context-2.5.xsd    打开配置

深入理解Spring事务原理_java

一.事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的.对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行:  1.获取连接 Connection con = DriverManager.getConnection()  2.开启事务con.setAutoCommit(true/false);  3.执行CRUD  4.提交事务/回滚事务 con.commit() / con.rollback();  5.关闭连接

Spring提取@Transactional事务注解的源码解析

声明:本文是自己在学习spring注解事务处理源代码时所留下的笔记: 难免有错误,敬请读者谅解!!! 1.事务注解标签 <tx:annotation-driven /> 2.tx 命名空间解析器 事务tx命名空间解析器TxNamespaceHandler org.springframework.transaction.config.TxNamespaceHandler#init 3.AnnotationDrivenBeanDefinitionParser#parse 解析事务标签 (1).以下

spring事务 异常-spring+hibernate注解开发异常,事务相关

问题描述 spring+hibernate注解开发异常,事务相关 异常信息: org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from tr

求spring跨库事务注解方式

问题描述 使用mysql库,有一个facade需要操作两个service,这两个service会操作不同的DAO向不同mysql数据库插入记录,我想问一下,通过spring的注解方式如何实现跨库事务配置,在网上搜索了半天没有找到答案,请大神指点,不胜感激. 解决方案 你这属于有多个事务性资源的情况,要使用全局事务管理器,你可以往spring的jta事务管理器方向进行研究解决方案二:去了解下spring的jta事务管理.解决方案三:http://blog.csdn.net/z69183787/ar

Spring事务管理高级应用难点剖析: 第2部分

联合军种作战的混乱 Spring 抽象的 DAO 体系兼容多种数据访问技术,它们各有特 色,各有千秋.像 Hibernate 是非常优秀的 ORM 实现方案,但对底层 SQL 的控制不太方便: 而 iBatis 则通过模板化技术让您方便地控制 SQL,但没有 Hibernate 那样高的开发效率:自 由度最高的当然是直接使用 Spring JDBC 莫属了,但是它也是最底层的,灵活的代价是代码的 繁复.很难说哪种数据访问技术是最优秀的,只有在某种特定的场景下,才能给出答案.所以 在一个应用中,往

Spring事务——Spring 2.X的事务配置策略

Spring 2.X的事务配置策略     虽然前面介绍的TransactionProxyFactoryBean配置策略简单易懂,但配置起来极为麻烦:每个目标Bean都需要配置一个TransactionProxyFactoryBean代理,这种方式将导致配置文件急剧增加.     Spring 2.X的XMLSchema方式提供了更简洁的事务配置策略,Spring 2.X提供了tx命名空间来配置事务管理,tx命名空间提供了<tx:advice../>元素来配置事务增强处理,一旦使用该元素配置了

浅析spring事务传播级别

spring是一个开源的框架,Spring为简化企业级应用开发而生,使用Spring可以使简单的JavaBean实现以前只有EJB才能实现的功能.今天我们先避开spring核心IOC&AOP,浅谈一下spring的事务传播级别. 误区 spring由于事务是是通过service一层控制的,因此为了保证事务的安全和可控性,尽量不要将两个事务要求的方法进行相互调用. 想想看,spring身为一个伟大的,灵活的框架.它怎么可能在事务这么重要的功能上给我们挖坑呢 在最开始使用spring进行事务开发管理