栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot自动配置原理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot自动配置原理

springboot自动配置原理

查看@SpringBootApplication的声明

查看@EnableAutoConfiguration的声明

自动配置的核心是@import(AutoConfigurationimportSelector.class),AutoConfigurationimportSelector类中的selectimports方法



下述文件里面写死了spring-boot一启动就要给容器中加载的所有配置类,,即xxxxAutoConfiguration

spring.factories文件中的类不是会被全部加载的,它是根据当前满足的条件进行过滤的。

以WebMvcAutoConfiguration为例,该自动配置类想要生效必须满足下述条件@ConditionalXxxx

//标注当前是一个配置类,而且不使用代理(每次返回的都是不同的bean实例)
@Configuration(proxyBeanMethods = false)
//想要当前配置生效,必须有servlet的运行环境
@ConditionalOnWebApplication(type = Type.SERVLET)
//想要当前配置生效,必须有Servlet、DispatcherServlet、WebMvcConfigurer这几个类
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
//想要当前配置生效,容器中不能存在指定WebMvcConfigurationSupport类型的Bean;
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
//设置自动配置执行的优先级
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
//当前配置加载后,之后需要进行的操作
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class,
		ValidationAutoConfiguration.class })

当满足上述所属的条件时,WebMvcAutoConfiguration才会被加载。其中,@ConditionalOnBean(当前类名.class)注解,满足了用户自定义的配置优先于speingboot底层默认的配置,被该注解标注后,表明只有注解属性中对应的类型的bean不存在时,该配置类才加载。

总结:

SpringBoot先加载所有的自动配置类 xxxxxAutoConfiguration

每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。xxxxProperties里面拿。xxxProperties和配置文件进行了绑定(xxxProperties类中的属性值,在配置文件中取)

生效的配置类就会给容器中装配很多组件

只要容器中有这些组件,相当于这些功能就有了

修改配置的方式

用户直接自己@Bean替换底层的组件(自定义的优先于默认的)用户去看这个组件是获取的配置文件什么值就去修改(在application.properties、application.yml中)。修改方式:查看官方文档或者查看源码,找到对应的prefix

就去修改(在application.properties、application.yml中)。修改方式:查看官方文档或者查看源码,找到对应的prefix

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/762939.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号