SpringBoot启动原理

通过springboot启动类的注解@SpringBootApplication

 关注注解@EnableAutoConfiguration

 点进去看这个类AutoConfigurationImportSelector的selectImports方法

 关注方法getCandidateConfigurations

再到

  重头戏来了,加载META-INF/spring.factories这个文件

 spring.factories这个文件,这个key: EnableAutoConfiguration对应下的自动配置类都会被加载

但是这些类是否自动配置,是根据其类上的注解@ConditionalOnClass等等来判断是否生效的

springboot项目启动时,会扫描所有jar包中的spring.factories文件,从而拿到其需加载的自动配置类,而这些配置类是否真实生效,又根据其类上注解决定

例如

数据源DataSource的自动配置 org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration 

生效条件是@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class }) 存在DataSource和EmbeddedDatabaseType

redis的自动配置org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration

其生效条件是@ConditionalOnClass(RedisOperations.class) 存在RedisOperations

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
当pom中引入spring-boot-starter-data-redis时,RedisAutoConfiguration自动配置类生效会被加载到内存中

 其他mq、mongo等等同理

未完待续...

原文地址:https://www.cnblogs.com/kobe-lin/p/11838970.html