条件2:Modifier.isPublic()
根据传入的 method.getModifiers()
获取方法的修饰符,该修饰符是 java.lang.reflect.Modifier 的静态属性,对应的几类修饰符分别是:
- PUBLIC: 1
- PRIVATE: 2
- PROTECTED: 4
这里做了一个位运算,只有当传入的方法修饰符是 public 类型的时候,才返回 true
综上两个条件,只有当注解为事务方法为 public 才会被 Spring 处理。
修正
只需将修饰符从 private 改成 public,其实该问题 IDEA 也会告警,一般都会避免。
调用这个加了事务注解的方法,必须是调用被 Spring AOP 代理过的方法:不能通过类的内部调用或通过 this 调用。
所以我们的案例的UserService,它Autowired了自身(UserService)的一个实例来完成代理方法的调用。