Spring事务中类上的@Transactional是如何被判断的?什么时候进行判断的?
判断一个类如果不需要被事务进行代理,则直接进行返回false,这里并没有对类上是否有事务注解进行拦截判断,这里的classFilter其实更像是给用户自定义用的,比如
我要自定义一些ClassFilter,需要进行判断,那这个地方就是一个埋点。
真正判断一个类上是否有事务注解的代码在这里,进入之后是下面的图
matchs方法会调用到下面这个matchs方法,而这个getTransactionAttributeSource方法会调用到通过切面里面的设置信息。
下面这个类是通过@EnableTransactionManagement进行引入的
transactionAttributeSource()会被设置到pointcut中,在进行match匹配的时候,会从中取出来进行使用,目的是获取事务注解里面的信息
上面这个是初始化的时候设置值。
看下他的父类,里面有上面提到的get方法。
看下父类
继续调用
看注释很明白,判断类上是否有事务注解。