SpringBoot专题学习Part10:详解SpringBoot的自动配置原理
自动配置原理SpringBoot在启动时 会加载主配置类 通过注解开启自动配置功能@EnableAutoConfiguration该注解的作用:利用选择器来为Spring容器导入一些组件其底层有一个方法:List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes)...
自动配置原理
SpringBoot在启动时 会加载主配置类 通过注解开启自动配置功能@EnableAutoConfiguration
该注解的作用:利用选择器来为Spring容器导入一些组件
其底层有一个方法:
List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);
翻译过来 也就是获取候选配置
它会扫描所有jar包类路径下的META-INF/spring.factories
文件
然后将扫描到的这些文件的内容包装成Properties对象 再从Properties对象中获取EnableAutoConfiguration.class
类对应的值 最后将它们添加到容器中
即 将类路径下的META-INF的spring.factories文件中配置的所有EnableAutoConfiguration的值加入到容器中
篇幅限制 仅列举一部分自动配置类:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration,\
org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,\\
org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.SecurityFilterAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.OAuth2AutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.WebSocketMessagingAutoConfiguration,\
org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration
(上面每一个类都是以AutoConfiguration结尾 因而就用xxxAutoConfiguration统称)
每一个xxxAutoConfiguration自动配置类 都是容器中的一个组件
用这些自动配置类来进行自动配置
每一个自动配置类都会进行自动配置功能
所有配置文件中能配置的属性都在对应的xxxProperties类中封装着
因而 欲知道配置文件能配置什么属性 参考对应的属性类即可 非常方便
SpringBoot的底层会根据当前不同的条件进行判断 以决定该配置类是否生效
一旦生效 则该配置类就会给容器中添加各种组件 这些组件的属性都是从对应的xxxProperties类中获取的 而xxxProperties类中的每个属性都是和配置文件一一绑定的
xxxAutoConfiguration
:自动配置类 用于给容器中添加组件xxxProperties
:用于封装配置文件中的相关属性
因此:
SpringBoot启动时会加载大量的自动配置类
只需要看需要的功能是否有SpringBoot默认写好了的配置类
- 若有 则看自动配置类共配置了哪些组件 若已经有了需要使用的组件 则无须再配置
- 若没有 则需要自己写一个配置类 从而配置相应的组件
当给容器中的自动配置类添加组件的时候 会从Properties类中获取某些属性 因而 可以在配置文件中指定这些属性的值
自动配置类必须在一定条件下才能生效
@Conditionalxxx
注解能帮助判断附带的条件是否生效
如何详细知道哪些自动配置类能生效?
通过配置中的debug=true
来启用该模式 开启自动配置报告
可以很方便地知道哪些自动配置类能生效 哪些没有启用及原因
结果会打印在控制台上
更多推荐
所有评论(0)