不使用@EnableTransactionManagement注解就能使用事务

@EnableTransactionManagement注解作用?

使用@EnableTransactionManagement注解可以开启事务支持,然后在方法上添加注解@Transactional即可实现事务。

但是其实现在不加@EnableTransactionManagement注解也是可以实现事务的,为什么呢?

先跟到@SpringBootApplication注解中,可以发现一个自动装配的注解@EnableAutoConfiguration,如下:

不使用@EnableTransactionManagement注解就能使用事务

跟进@EnableAutoConfiguration注解中,会发现一个选择器类AutoConfigurationImportSelector,如下:

不使用@EnableTransactionManagement注解就能使用事务

跟进AutoConfigurationImportSelector类中,最终会发现如下方法:

不使用@EnableTransactionManagement注解就能使用事务

定位一下,找到spring.factories文件,如下:

不使用@EnableTransactionManagement注解就能使用事务

TransactionAutoConfiguration类就是事务的自动装配了,在Spring容器启动时会自动进行装载。

跟进TransactionAutoConfiguration类,就会发现@EnableTransactionManagement注解了,如下:

不使用@EnableTransactionManagement注解就能使用事务

这里也可以看出事务管理是基于Spring Aop,所以上面才分了两种方式,JDK动态代理和Cglib的动态代理。

因此可以得出,由于Spring Boot会帮我们自动装配事务,因此@EnableTransactionManagement注解可以不用加。