其他分享
首页 > 其他分享> > SpringBoot自动配置原理

SpringBoot自动配置原理

作者:互联网

 1 关于自动配置原理
 2 文件里面写死了springboot一启动就要给容器加载的所有配置类
 3 spring-boot-autoconfigure-2.4.3.jar/spring.factories中,共130个xxxAutoConfiguration组件
 4 虽然130个场景的所有自动配置在启动时默认全部加载
 5 按照@ConditionalOnxxx()条件装配规则,最终会按需配置
 6 
 7 
 8 @Bean
 9 @ConditionalOnBean({MultipartResolver.class})  //容器中有MultipartResolver类型的组件
10 @ConditionalOnMissingBean(name = {"multipartResolver"}) //容器中没有名为multipartResolver的组件
11 public MultipartResolver multipartResolver(MultipartResolver resolver) {
12     //当满足上面两个条件,比如容器中有且仅有一个MultipartResolver类型的组件,名为mulResolve(用户自定义的组件),
13     //则当此方法调用时,Springboot会在容器中找到mulResolve组件,赋给参数对象resolver
14     return resolver;
15 }
16 
17 结论:通过上面源码的分析可知:当用户自定义了一个MultipartResolver类型的组件,为了防止用户命名组件名不符合规范,
18     底层会将用户自定义的组件添加到容器中,组件名就会以方法名multipartResolver来进行规范
19 
20 @Bean
21 @ConditionalOnMissingBean  //容器中不存在characterEncodingFilter组件时,底层就执行组件方法,将创建的组件添加到容器中
22 public CharacterEncodingFilter characterEncodingFilter() {...}
23 结论:SpringBoot默认会在底层配好所有的组件。但是如果用户自己配置了以用户的优先
24 
25 
26 @Configuration(proxyBeanMethods = false)
27 @EnableConfigurationProperties({XXXProperties.class})
28 public class A{}
29 
30 @ConfigurationProperties(prefix = "spring.mvc")
31 public class XXXProperties {}
32 
33 结论:XXXProperties和application.properties配置文件中前缀为“spring.mvc”的属性完成了配置绑定,
34 当类A中调用XXXProperties对象的属性时,可以在application.properties配置文件中修改前缀为“spring.mvc”的属性值,
35 来完成动态的修改
36 
37 
38 
39 总结:
40     1.SpringBoot先加载所有的自动配置类 xxxAutoConfiguration
41     2.每个自动配置类按照@ConditionalOnxxx()条件进行生效,默认都会绑定配置文件指定的值
42         xxxProperties里面拿。xxxProperties和application.properties配置文件进行了绑定
43     3.生效的配置类就会给容器中装配很多的组件
44     4.只要容器中有了这些组件,相当于这些功能也就有了
45     5.定制化配置:
46         方式一:用户直接自己@Bean替换底层的组件
47         方式二:用户去看这个组件底层是获取的配置文件的什么值就去修改

 

标签:容器,MultipartResolver,SpringBoot,配置文件,spring,配置,自动,组件,原理
来源: https://www.cnblogs.com/zui-ai-java/p/14521596.html