为什么private方法加了@Transactional,事务也没有生效?(下)

简介: 为什么private方法加了@Transactional,事务也没有生效?
条件2:Modifier.isPublic()

根据传入的 method.getModifiers() 获取方法的修饰符,该修饰符是 java.lang.reflect.Modifier 的静态属性,对应的几类修饰符分别是:


  • PUBLIC: 1
  • PRIVATE: 2
  • PROTECTED: 4


这里做了一个位运算,只有当传入的方法修饰符是 public 类型的时候,才返回 true

image.png

综上两个条件,只有当注解为事务方法为 public 才会被 Spring 处理。

修正

只需将修饰符从 private 改成 public,其实该问题 IDEA 也会告警,一般都会避免。

image.png

调用这个加了事务注解的方法,必须是调用被 Spring AOP 代理过的方法:不能通过类的内部调用或通过 this 调用。

所以我们的案例的UserService,它Autowired了自身(UserService)的一个实例来完成代理方法的调用。

目录
相关文章
|
7月前
|
Java 编译器 数据库
@Transactional中指定rollbackFor,弊端以及不能回滚的时候
@Transactional中指定rollbackFor,弊端以及不能回滚的时候
250 3
|
7月前
|
XML Java 关系型数据库
@Transactional注解的失效场景
@Transactional注解的失效场景
119 1
|
7月前
|
Java 编译器 数据库
在事务注解@Transactional中指定rollbackFor
在事务注解@Transactional中指定rollbackFor
63 0
|
5月前
|
SQL BI 数据库
带你理解 只读事务(@Transactional(readOnly = true)
带你理解 只读事务(@Transactional(readOnly = true)
360 1
|
7月前
|
Java 编译器 Spring
@transactional注解失效情况
@transactional注解失效情况
|
7月前
|
Java 数据库 Spring
@Transactional 失效场景介绍
【2月更文挑战第5天】
645 1
@Transactional 失效场景介绍
|
7月前
|
关系型数据库 Java MySQL
一篇文章学会使用@Transactional
一篇文章学会使用@Transactional
80 0
|
SQL Java 数据库连接
@Transactional
@Transactional
116 0
|
Java 数据库 Spring
@Transactional 注解失效问题
@Transactional 注解失效问题
112 0