Spring事务中类上的@Transactional是如何被判断的?什么时候进行判断的?

判断一个类如果不需要被事务进行代理,则直接进行返回false,这里并没有对类上是否有事务注解进行拦截判断,这里的classFilter其实更像是给用户自定义用的,比如

我要自定义一些ClassFilter,需要进行判断,那这个地方就是一个埋点。

 

真正判断一个类上是否有事务注解的代码在这里,进入之后是下面的图

 

 matchs方法会调用到下面这个matchs方法,而这个getTransactionAttributeSource方法会调用到通过切面里面的设置信息。

 

 

下面这个类是通过@EnableTransactionManagement进行引入的

transactionAttributeSource()会被设置到pointcut中,在进行match匹配的时候,会从中取出来进行使用,目的是获取事务注解里面的信息

 

 上面这个是初始化的时候设置值。

看下他的父类,里面有上面提到的get方法。

 看下父类

 继续调用

 

 看注释很明白,判断类上是否有事务注解。

posted @ 2022-03-02 17:32  0o飞行天下o0  阅读(306)  评论(0编辑  收藏  举报