使用场景
我们在进行springboot进行开发的时候,会直接使用注解@Transactional 来进行事务的控制,那为什么我们使用@Transactional 注解的时候不需要再启动类上加上@EnableTransactionManagement?
探索原因
众所周知,springboot在启动的时候会自动装配很多配置类,那根据上面的问题,我们自然而然就想到是不是springboot在启动的时候就装配了相关Transactional 的配置类了。接下来我们进行查看springboot启动类源码
1.进入关键类
2.在AutoConfigurationImportSelector类中,我们需要找到我们的配置类,是在哪里被springboot自动加载的,我们在被重写的selectImports里面找到我们需要获取自动配置类的实体,即getAutoConfigurationEntry方法
3.找到getCandidateConfigurations()方法,Candidate是候选人的意思,那这边我们就可以理解为找到候选的配置,即需要配加载的配置类,这也比较好理解,我们springboot启动的时候需要加载自动配置类,那需要加载哪些,我们肯定要先进行一个获取,那这些需要被加载的配置类,我们不就是可以理解为候选的配置类嘛
在118行可以获取到org.springframework.boot.autoconfigure.EnableAutoConfiguration属性,然后就可以去去spring.factory配置文件中找到对应的自定加载配置类
4.分析对应的getCandidateConfigurations方法
5.分析SpringFactories.loadFactoryNames()方法,到这里我们就找到了springboot在哪里加载这个自定配置类了,查找所有依赖jar包下的META_INF/spring.factories这个配置文件
6.找到对应的事务自动配置类
7.找到事务控制的方法的bean