springboot2.0.0.RELEASE源码分析
2021-03-25 23:03:33 0 举报
springboot2.0.0.RELEASE版本 按启动流程源码分析
作者其他创作
大纲/内容
向注入容器(有默认初始化)单例注入运行命令参数ApplicationArguments bean名称叫 \"springApplicationArguments\"单例注入运行命令参数Bannerbean名称叫 \"springBootBanner\"
ConfigurableApplicationContext创建配置应用上下文这个应用上下文是最终springboot启动后要返回的对象
刷新注入容器的一些配置,比如 是否循环引用、bean定义是否可重写添加一些bean后置处理器
PropertySource<T>.classprotected final String name = \"commandLineArgs\" protected final T source = CommandLineArgs.classCommandLineArgs就是由args[]解析得来的
SpringApplicationRunListenerspring运行监听器加载
ApplicationStartingEvent
banner打印
AnnotationConfigServletWebServerApplicationContext
ApplicationListener应用监听器加载
处理配置应用上下文
ApplicationPreparedEvent
ApplicationArgumentsargs[]运行参数加载
ContextRefreshedEvent
ApplicationListener应用监听器
spring boot启动流程
两个彩蛋
初始化器执行initialize方法
publishEvent(new ContextRefreshedEvent(this));
EventPublishingRunListener中的实现为空方法
执行Bean后置处理器有一个比较重要用来做自动装配的AutoConfig
刷新环境变量
order排序OrderComparator.class
AnnotationConfigServletWebServerApplicationContext初始化的时候有两个字段也进行了初始化,比较重要1、创建一个读取注解的Bean定义读取器private final AnnotatedBeanDefinitionReader reader;并且同时向context注册一些Bean后置处理器2、创建BeanDefinition扫描器,可以用来扫描包或者类,继而转换为bdprivate final ClassPathBeanDefinitionScanner scanner;注册过滤器,带有@Component、@Repository、@Service、@Controller、@ManagedBean、@Named 注解的类会被spring扫描到
ApplicationEnvironmentPreparedEvent
listeners.contextPrepared(context);
根据先前context中的bean定义注册器BeanDefinitionRegistry(context本身就是)和传入的source(一些类.class或包路径)创建bean定义加载器,并加载bean,然后注入
CommandLineRunner.run()
spring.factory
环境变量的后续一些处理
listeners.environmentPrepared(environment);
ApplicationContextInitializer应用上下文初始化器加载
包路径等对象的注入。。。
ApplicationRunner.run()
SpringBootExceptionReporter异常报告器加载
listeners.started(context);
创建Tomcate服务器
listener.starting();
ApplicationStartedEvent
SimpleApplicationEventMulticaster
listeners.contextLoaded(context);
EventPublishingRunListener
向MutablePropertySources 中添加一个 PropertySource这个PropertySource的 name = \"configurationProperties\"source就是 MutablePropertySources 本身 是不是很迷
真实存储情况
如果这个类有Component的注解,就先生成一个bean定义并设置scope并由BeanNameGenerator 生成器生成一个名字然后处理一些公共定义的注解然后注入到注入容器当中去,还可以设置别名
StandardServletEnvironment
ConfigurableEnvironment环境变量准备
imagebanner:banner.\"gif\
给context设置环境变量
字段
刷新上下文
MutablePropertySourcesSet<String> activeProfilesMutablePropertySources 是一个List<PropertySource<?>>1、这个会把运行参数args[]也封装成 PropertySource,然后加到环境变量MutablePropertySources中去。2、加载生效的配置文件名至 activeProfiles是怎么加载的呢?从MutablePropertySources中查找每一个 PropertySource 找到name等于 spring.profiles.active的不过显然此时是空的,因为不存在这样的 PropertySource
0 条评论
下一页