向context的beanFactoryPostProcessors中注册了一个PropertySourceOrderingPostProcessor实例
向beanFactory中注册了一个名叫springBootLoggingSystem的单例bean,也就是我们的日志系统bean
3、加载资源
支持4种方式:Class、Resource、Package和CharSequence。
Class:注解形式的Bean定义;AnnotatedBeanDefinitionReader负责处理。
Resource:一般而言指的是xml bean配置文件,也就是我们在spring中常用的xml配置。说的简单点就是:将xml的bean定义封装成BeanDefinition并注册到beanFactory的BeanDefinitionMap中;XmlBeanDefinitionReader负责处理。
Package:以扫包的方式扫描bean定义; ClassPathBeanDefinitionScanner负责处理。
CharSequence:以先后顺序进行匹配Class、Resource或Package进行加载,谁匹配上了就用谁的处理方式处理。
springboot鼓励用java类实现java bean定义,所以springboot应用中,我们一般只需要关注Class方式、Package方式即可。
context中主要是三个属性增加了内容:beanFactory、beanFactoryPostProcessors和applicationListeners
三个事件ApplicationStartingEvent
在监听器注册完、SpringApplication构造完后,以及其他的任何处理之前被广播,触发对应的事件监听器
ApplicationEnvironmentPreparedEvent
environment创建后,context创建之前被广播,触发对应的事件监听器
ApplicationPreparedEvent
bean定义加载后,上下文refresh之前被广播,触发对应的事件监听器
后续还会涉及到ApplicationReadyEvent、ApplicationFailedEvent事件,后续再详解
关于事件机制,可到此处查看更多详情
三个核心
springboot的特性之一,内容如下
23. SpringApplication
23.1. Startup Failure
23.2. Customizing the Banner
23.3. Customizing SpringApplication
23.4. Fluent Builder API
23.5. Application Events and Listeners
23.6. Web Environment
23.7. Accessing Application Arguments
23.8. Using the ApplicationRunner or CommandLineRunner
23.9. Application Exit
23.10. Admin Features
也是springboot中比较重要的特性之一,用于从java main方法引导和启动Spring应用程序。其实给我印象最深的还是从spring.factories加载一系列的类,包括Initializer、ApplicationListener、AutoConfigure、Failure analyzers等等,springboot的自动配置,从此时已经开始了,一系列的AutoConfigure都是从spring.factories获取的。
environment:StandardServletEnvironment
表示当前应用程序所处的环境,主要包括两方面:profiles和properties;例如我们经常说的本地、运测、预发布、生产环境,就可以通过environment进行配置,以及是否是web环境。
一般而言,我们的环境是StandardServletEnvironment,标准的servlet环境,也就是我们经常说的web环境
ApplicationContext:AnnotationConfigServletWebServerApplicationContext
应用上下文,用于为应用程序提供配置的中央接口,提供如下内容:
1、访问应用程序组件的Bean工厂方法
2、加载文件资源的能力
3、发布事件到已注册的事件监听器的能力
4、解析消息,支持国际化的能力
等等一系列的功能
AnnotationConfigServletWebServerApplicationContext是springboot对spring应用上下文的拓展,引入了一些springboot的内容。