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