@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

相关文章

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方

如何使用Spring boot的@Transactional进行事务管理

《如何使用Springboot的@Transactional进行事务管理》这篇文章介绍了SpringBoot中使用@Transactional注解进行声明式事务管理的详细信息,包括基本用法、核心配置... 目录一、前置条件二、基本用法1. 在方法上添加注解2. 在类上添加注解三、核心配置参数1. 传播行为(

Java中基于注解的代码生成工具MapStruct映射使用详解

《Java中基于注解的代码生成工具MapStruct映射使用详解》MapStruct作为一个基于注解的代码生成工具,为我们提供了一种更加优雅、高效的解决方案,本文主要为大家介绍了它的具体使用,感兴趣... 目录介绍优缺点优点缺点核心注解及详细使用语法说明@Mapper@Mapping@Mappings@Co

Java中注解与元数据示例详解

《Java中注解与元数据示例详解》Java注解和元数据是编程中重要的概念,用于描述程序元素的属性和用途,:本文主要介绍Java中注解与元数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参... 目录一、引言二、元数据的概念2.1 定义2.2 作用三、Java 注解的基础3.1 注解的定义3.2 内

Java访问修饰符public、private、protected及默认访问权限详解

《Java访问修饰符public、private、protected及默认访问权限详解》:本文主要介绍Java访问修饰符public、private、protected及默认访问权限的相关资料,每... 目录前言1. public 访问修饰符特点:示例:适用场景:2. private 访问修饰符特点:示例:

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

SpringBoot使用注解集成Redis缓存的示例代码

《SpringBoot使用注解集成Redis缓存的示例代码》:本文主要介绍在SpringBoot中使用注解集成Redis缓存的步骤,包括添加依赖、创建相关配置类、需要缓存数据的类(Tes... 目录一、创建 Caching 配置类二、创建需要缓存数据的类三、测试方法Spring Boot 熟悉后,集成一个外

使用@Slf4j注解,log.info()无法使用问题

《使用@Slf4j注解,log.info()无法使用问题》在使用Lombok的@Slf4j注解打印日志时遇到问题,通过降低Lombok版本(从1.18.x降至1.16.10)解决了问题... 目录@Slf4androidj注解,log.info()无法使用问题最后解决总结@Slf4j注解,log.info(