1、@SpringBootApplication配置

image.png

2、@SpringBootConfiguration

里面是是一个Configuration
image.png
所以这是一个配置类

3、@ComponentScan 就是一个包扫描

4、@EnableAutoConfiguration

image.png

5、@AutoConfiguration

image.png
里面就是一个@Import注解,用来导入组件

6、AutoConfigurationPackages.Registrar批量导入组件

image.png
Debug断点到这就是发现元信息就是我们的启动类image.png
获取到的包名称com.daijunyi.springboot1。
image.png

7、@Import(AutoConfigurationImportSelector.class)

研究里面核心是image.png

  1. 利用getAutoConfigurationEntry(annotationMetadata)给容器导入组件
  2. 利用List configurations = getCandidateConfigurations(annotationMetadata, attributes)获取到所需要导入的目录
  3. 利用工厂加载List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),
  4. getBeanClassLoader());获取到所有的组件
  5. spring-boot-autoconfigure.jar包下的META-INF下的spring.factories中获取的包名

image.png
发现找到了131个包
通过getSpringFactoriesLoaderFactoryClass()发现加载的是这个包名下org.springframework.boot.autoconfigure.EnableAutoConfiguration下的
image.png
image.png

spring boot 写死了从配置文件中一键导入的组件类

  1. # Auto Configure
  2. org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  3. org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
  4. org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
  5. org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
  6. org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
  7. org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
  8. org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
  9. org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
  10. org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration,\
  11. org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
  12. org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
  13. org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
  14. org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\
  15. org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\
  16. org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveDataAutoConfiguration,\
  17. org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveRepositoriesAutoConfiguration,\
  18. org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,\
  19. org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,\
  20. org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveDataAutoConfiguration,\
  21. org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveRepositoriesAutoConfiguration,\
  22. org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration,\
  23. org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,\
  24. org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\
  25. org.springframework.boot.autoconfigure.data.elasticsearch.ReactiveElasticsearchRepositoriesAutoConfiguration,\
  26. org.springframework.boot.autoconfigure.data.elasticsearch.ReactiveElasticsearchRestClientAutoConfiguration,\
  27. org.springframework.boot.autoconfigure.data.jdbc.JdbcRepositoriesAutoConfiguration,\
  28. org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\
  29. org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,\
  30. org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\
  31. org.springframework.boot.autoconfigure.data.mongo.MongoReactiveDataAutoConfiguration,\
  32. org.springframework.boot.autoconfigure.data.mongo.MongoReactiveRepositoriesAutoConfiguration,\
  33. org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\
  34. org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,\
  35. org.springframework.boot.autoconfigure.data.neo4j.Neo4jReactiveDataAutoConfiguration,\
  36. org.springframework.boot.autoconfigure.data.neo4j.Neo4jReactiveRepositoriesAutoConfiguration,\
  37. org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,\
  38. org.springframework.boot.autoconfigure.data.r2dbc.R2dbcDataAutoConfiguration,\
  39. org.springframework.boot.autoconfigure.data.r2dbc.R2dbcRepositoriesAutoConfiguration,\
  40. org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\
  41. org.springframework.boot.autoconfigure.data.redis.RedisReactiveAutoConfiguration,\
  42. org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\
  43. org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\
  44. org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,\
  45. org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration,\
  46. org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
  47. org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\
  48. org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\
  49. org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\
  50. org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration,\
  51. org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\
  52. org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\
  53. org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\
  54. org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration,\
  55. org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration,\
  56. org.springframework.boot.autoconfigure.influx.InfluxDbAutoConfiguration,\
  57. org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\
  58. org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\
  59. org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\
  60. org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
  61. org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
  62. org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\
  63. org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\
  64. org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
  65. org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,\
  66. org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\
  67. org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration,\
  68. org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,\
  69. org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration,\
  70. org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration,\
  71. org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\
  72. org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration,\
  73. org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration,\
  74. org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration,\
  75. org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration,\
  76. org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration,\
  77. org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
  78. org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\
  79. org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\
  80. org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\
  81. org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
  82. org.springframework.boot.autoconfigure.mongo.MongoReactiveAutoConfiguration,\
  83. org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\
  84. org.springframework.boot.autoconfigure.neo4j.Neo4jAutoConfiguration,\
  85. org.springframework.boot.autoconfigure.netty.NettyAutoConfiguration,\
  86. org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
  87. org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration,\
  88. org.springframework.boot.autoconfigure.r2dbc.R2dbcAutoConfiguration,\
  89. org.springframework.boot.autoconfigure.r2dbc.R2dbcTransactionManagerAutoConfiguration,\
  90. org.springframework.boot.autoconfigure.rsocket.RSocketMessagingAutoConfiguration,\
  91. org.springframework.boot.autoconfigure.rsocket.RSocketRequesterAutoConfiguration,\
  92. org.springframework.boot.autoconfigure.rsocket.RSocketServerAutoConfiguration,\
  93. org.springframework.boot.autoconfigure.rsocket.RSocketStrategiesAutoConfiguration,\
  94. org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration,\
  95. org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration,\
  96. org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration,\
  97. org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration,\
  98. org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration,\
  99. org.springframework.boot.autoconfigure.security.rsocket.RSocketSecurityAutoConfiguration,\
  100. org.springframework.boot.autoconfigure.security.saml2.Saml2RelyingPartyAutoConfiguration,\
  101. org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration,\
  102. org.springframework.boot.autoconfigure.session.SessionAutoConfiguration,\
  103. org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration,\
  104. org.springframework.boot.autoconfigure.security.oauth2.client.reactive.ReactiveOAuth2ClientAutoConfiguration,\
  105. org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration,\
  106. org.springframework.boot.autoconfigure.security.oauth2.resource.reactive.ReactiveOAuth2ResourceServerAutoConfiguration,\
  107. org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,\
  108. org.springframework.boot.autoconfigure.sql.init.SqlInitializationAutoConfiguration,\
  109. org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration,\
  110. org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration,\
  111. org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\
  112. org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\
  113. org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\
  114. org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration,\
  115. org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration,\
  116. org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration,\
  117. org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration,\
  118. org.springframework.boot.autoconfigure.web.reactive.ReactiveWebServerFactoryAutoConfiguration,\
  119. org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration,\
  120. org.springframework.boot.autoconfigure.web.reactive.error.ErrorWebFluxAutoConfiguration,\
  121. org.springframework.boot.autoconfigure.web.reactive.function.client.ClientHttpConnectorAutoConfiguration,\
  122. org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration,\
  123. org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration,\
  124. org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration,\
  125. org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration,\
  126. org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration,\
  127. org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration,\
  128. org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
  129. org.springframework.boot.autoconfigure.websocket.reactive.WebSocketReactiveAutoConfiguration,\
  130. org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration,\
  131. org.springframework.boot.autoconfigure.websocket.servlet.WebSocketMessagingAutoConfiguration,\
  132. org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration,\
  133. org.springframework.boot.autoconfigure.webservices.client.WebServiceTemplateAutoConfiguration

8、spring boot 按需装配

Springboot通过@Conditional相关注解来按需加载
image.png