美文网首页
SpringBoot - 启动原理

SpringBoot - 启动原理

作者: 沐兮_d64c | 来源:发表于2019-07-19 10:31 被阅读0次

    1,@SpringBootApplication注解解析

    1)定义一个类为Configuration类,并且开启EnableAutoConfiguration自动配置以及ComponentScan包扫描。等效于@Configuration、@EnableAutoConfiguration、@ComponentScan三个注解。
    2)@Configuration
    JavaConfig 形式的IOC容器配置类(class中声明多个bean方法,运行时经spring容器处理生成bean对象)。等效于<beans> ...</beans>;@Bean等效于<bean>...</bean>;<bean>的ref引用等效于@Bean方法的调用。
    3)与Configuration相关注解:
    1.@ImportResource 引入额外的xml文件。

    image.png
    2.@Import 引入额外的@Configuration修饰类。等效于<import/>
    image.png
    4)@ComponentScan
    自动扫描和加载组件。等效于<context:component-scan>,可以使用basePackages指定扫描的包,默认扫描本类所在的package。扫描被@Component、@Repository、@Service等注解的类,将bean定义加载到ioc容器中。
    image.png
    5)@EnableAutoConfiguration
    核心@Import(AutoConfigurationImportSelector.class),借助@Import,将收集和注册特定场景相关的bean定义,加载bean到ioc容器中。
    收集需要导入的配置类
    image.png
    借助SpringFactoriesLoader,从指定配置文件(META-INF/spring.factories)加载配置。
    从classpath下搜索META-INF/spring.factories配置文件,将Key为:org.springframework.boot.autoconfigure.EnableAutoConfiguration的配置项导入。
    image.png
    image.png
    启动过程中会解析对应类配置信息,生成BeanDefinition,并加载到IOC容器的List中。
    image.png

    2,SpringApplication执行流程

    1)ApplicationContextInitializer和ApplicationListener初始化

    image.png
    从MATA-INF/spring.factories获取类的全限定名,反射实例化。
    image.png
    2)run方法,获取classpath下MATA-INF/spring.factories中所有SpringApplicationRunListener,作为ApplicationStartingEvent发布
    image.png
    image.png
    image.png
    3)核心创建IOC容器
    image.png
    4)启动WebServer服务器
    SpringApplication#refreshContext(context); -> 父类AbstractApplicationContext#refresh()方法 -> onRefresh();方法 -> 子类ServletWebServerApplicationContext#onRefresh() -> createWebServer()
    image.png
    5)listeners.started(context);
    image.png
    6)执行容器初始化,refreshContext(context)
    image.png

    相关文章

      网友评论

          本文标题:SpringBoot - 启动原理

          本文链接:https://www.haomeiwen.com/subject/gfpzkctx.html