自动配置原理
1 springboot的启动过程
springcontext.run到底干了什么
@startuml
' 定义对象,第一个对象SpringApplication是Springboot提供的第一个对象公民。
class SpringApplication{
run:通过静态的run方法创建第一个对象SpringApplication,然后执行对象的run方法。
getRunListeners:通过Thread.concurrentThread.getContextClassLoader方法得到主线程,当前线程的类加载器(用于加载字节码文件)
preapareEnviroment:准备属性配置文件。
}
@enduml
- SpringApplication.run该run方法可以启动一个类,也可以启动多个类
public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {
return run(new Class<?>[] { primarySource }, args);
}
/**
* Static helper that can be used to run a {@link SpringApplication} from the
* specified sources using default settings and user supplied arguments.
* @param primarySources the primary sources to load
* @param args the application arguments (usually passed from a Java main method)
* @return the running {@link ApplicationContext}
*/
public static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) {
return new SpringApplication(primarySources).run(args);
}
2 自动配置加载的过程
加载过程
- @SpringBootConfiguration,就是一个@Configuration配置类。定义这是一个配置类。
- @ComponentScan指定包扫描
- @EnableAutoConfiguration
- @AutoConfigurationPackage自动配置包。将该包下的所有配置类导入进去。
- @Import(AutoConfigurationImportSelect.class)导入一个包。在autoconfiguration.jar包下,META_INF/spring.factories文件中,给出了全类名。
自动配置总结
- Spring 加载所有的自动配置类
- 每个自动配置类按照条件生效,默认会绑定配置文件指定的值。xxxProperties和属性配置文件进行绑定。
- 生效的配置类给容器中装配很多组件。
- 只要容器中有这些组件,相当于这些功能就有了
- 只要用户配置了,以用户的优先。
- 定制化,用自己的Bean替换底层的组件
- 用户去看这个组件获取的配置文件是什么值就去修改什么值。
需要怎么使用
- 引入场景依赖
- 看一下springboot官网的常见的starter场景
- 查看自动配置了哪些类
- 自己分析,引入场景对应的自动配置类,自动配置一般都生效了。
- 配置文件中debug=true开启自动配置报告,negative\postive会显示生效和不生效的配置
- 是否需要修改
- 参照文档修改配置项Properties配置绑定。参考官方的配置文档。
- 自定义或加入替换组件。通过@Bean替换组件
- 额外的自定义器。xxxCustomizer
本文链接:
/archives/1677747173427
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
Subnew!
喜欢就支持一下吧