@Transactional(rollbackFor = Exception.class)注解放到private修饰的类上报错

本文主要是介绍@Transactional(rollbackFor = Exception.class)注解放到private修饰的类上报错,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

有两个方法中,更新数部分是相同的,打算把这一部分那重来,做一个公用的私有方法。
考虑数据一致性,原本每个方法都使用了@Transactional(rollbackFor = Exception.class)注解,保证失败回滚,创建私有方法以后,将@Transactional(rollbackFor = Exception.class)注解放到私有方法上,但private却报错,提示去掉private

查询原因

@Transactional 注解用于对方法或类进行事务管理。同时,它只能应用在 public 修饰的方法上,而不能应用在 private 修饰的方法上。

原因是该注解是通过 Spring AOP 来实现事务管理的。Spring AOP 使用动态代理来实现方法拦截和增强,但是私有方法在子类中是不可见的,无法被子类覆盖和继承,因此无法生成代理对象来进行事务管理。

如果你想在私有方法上应用事务声明,有以下几种解决方案:

  1. 将私有方法改为 public 或受保护的方法:可以将私有方法改为 public 或受保护的方法,然后在这些方法上添加 @Transactional 注解,使其能够被 Spring AOP 拦截并应用事务管理。这样一来,在类的外部仍然无法直接调用私有方法,只能通过公共的方法来触发私有方法的执行。

  2. 通过 self-invocation 来间接调用私有方法:如果你确实需要在私有方法中应用事务,你可以通过类内部的其他方法来间接调用私有方法,并在这些公共方法上添加 @Transactional 注解。这样,事务将应用到间接调用的私有方法上。

需要注意的是,在使用 @Transactional 注解时,还需确保配置了事务管理器和正确的事务相关的配置,以便使事务生效。

这篇关于@Transactional(rollbackFor = Exception.class)注解放到private修饰的类上报错的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/992255

相关文章

SpringRetry重试机制之@Retryable注解与重试策略详解

《SpringRetry重试机制之@Retryable注解与重试策略详解》本文将详细介绍SpringRetry的重试机制,特别是@Retryable注解的使用及各种重试策略的配置,帮助开发者构建更加健... 目录引言一、SpringRetry基础知识二、启用SpringRetry三、@Retryable注解

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

SpringBoot条件注解核心作用与使用场景详解

《SpringBoot条件注解核心作用与使用场景详解》SpringBoot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键,本文将系统梳理所有常用的条件注... 目录引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、@ConditionalOn

SpringBoot利用@Validated注解优雅实现参数校验

《SpringBoot利用@Validated注解优雅实现参数校验》在开发Web应用时,用户输入的合法性校验是保障系统稳定性的基础,​SpringBoot的@Validated注解提供了一种更优雅的解... 目录​一、为什么需要参数校验二、Validated 的核心用法​1. 基础校验2. php分组校验3

Spring Security方法级安全控制@PreAuthorize注解的灵活运用小结

《SpringSecurity方法级安全控制@PreAuthorize注解的灵活运用小结》本文将带着大家讲解@PreAuthorize注解的核心原理、SpEL表达式机制,并通过的示例代码演示如... 目录1. 前言2. @PreAuthorize 注解简介3. @PreAuthorize 核心原理解析拦截与

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat