博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springBoot的工作机制--springBoot揭秘
阅读量:5895 次
发布时间:2019-06-19

本文共 2760 字,大约阅读时间需要 9 分钟。

文章目录

1、@SpringBootApplication -- SpringBoot的核心注解
2、SpringApplication的执行流程
3、SpringApplication的扩展点

1、@SpringBootApplication -- SpringBoot的核心注解

@SpringBootApplication 内含3个子注解:

1.1、@Configuration

该注解用于JavaConfig中,被该注解标注的表示,该类是个配置类。

1.2、@ComponentScan

自动扫描注解,扫描路径下的组件或者Bean

1.3@EnableAutoConfiguration

@EnableAutoConfiguration是个复合注解,源代码如下

@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@AutoConfigurationPackage@Import({EnableAutoConfigurationImportSelector.class})public @interface EnableAutoConfiguration {    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";    Class
[] exclude() default {}; String[] excludeName() default {};}

@EnableAutoConfiguration 最关键的是@Import({EnableAUtoConfigurationImportSelector.class}) 注解。

该注解的功能是帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot应用

1.4自动配置的幕后英雄:SpringFactoriesLoader

该类的作用是加载SpringBoot应用下META-INF/spring.factories配置文件。该配置文件是一个Properties文件。
在spring-boot 和 spring-boot-autoconfig 的META-INF/spring.factories中定义了自动配置的类

1.5@EnableAutoConfiguration综述

通过1.3、1.4的描述。@EnableAutoConfiguration的作用可以描述为:从classpath下搜寻所有的META-INF/spring.factories配置文件,并将EnableAutoConfiguration对应的配置项通过反射实例化为对应标注了@Configuration的IoC容器配置类,然后汇总为一个并加载到IoC容器中

2、SpringApplication的执行流程

2.1、SpringApplication在实例化之前

2.1.1、SpringApplication在实例化之前会根据你的应用决定创建web类型或者是标准的ApllicationContext
2.1.2、使用SpringFactoriesLoader在classpath下查找并加载所有可用的ApplicationContextInitializer
2.1.3、使用SpringFactoriesLoader在classpath下查找并加载所有可用的ApplicationListener

2.2、SpringApplication实例化完成并设置之后

1、通过SpringFactoriesLoader加载SpringApplicationRunListener(创建监听器)
2、创建应用需要的Environment(创建应用所需环境)
3、Environment创建完毕,SpringApplicationRunListner调用environmentPrepared()。(通知完毕)
4、根据当前应用创建ApplicationContext
5、调用ApplicationContextInitialzer,对ApplicationContext进一步处理(进一步处理)
6、处理完毕,SpringApplicationRunListner调用contextPrepared().(通知完毕)
7、将之前通过@EnableAutoConfiguration获取的所有配置以及其他形式的IoC容器配置加载到已经准备完毕的ApplicationContex
8、SpringApplicationRunListener调用contextLoader()。(通知完毕)
9、调用ApplicationContext的refresh()。完成IoC容器可以的最后一道程序
10、调用SpringApplicationRunListener的finish()。(通知完成)

图片描述

3、SpringApplication的扩展点

1、SpringApplicationRunListner(事件通知的监听者)

实现请参考-->默认实现类--EventPublishingRunListener

2、ApplicationListener(监听某类事件的发生)

Demo:

public class Listener implements ApplicationListener
{ @Override public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { }}

3、ApplicationContextInitializer(进一步处理ApplicationContext)

Demo

public class Demo implements ApplicationContextInitializer {    @Override    public void initialize(ConfigurableApplictionContext application)}

4、CommandLineRunner

CommandLineRunner的执行点在main方法执行完成之前最后一步
SpringBoot中的所有CommandLineRunner都会被加载执行
CommandLinerRunner 最好使用@Ordered注解标注顺序

转载地址:http://atisx.baihongyu.com/

你可能感兴趣的文章
2017python第六天作业 面向对象 本节作业: 选课系统
查看>>
【找规律】Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) B. Code For 1...
查看>>
Scribes:小型文本编辑器,支持远程编辑
查看>>
为什么要使用 SPL中的 SplQueue实现队列
查看>>
文件的相关操作(创建、打开、写入、读出、重命名)
查看>>
品尝阿里云容器服务:用nginx镜像创建容器,体验基于域名的路由机制
查看>>
PHP const关键字
查看>>
ssh 安装笔记
查看>>
游戏音效下载网站大全
查看>>
angular $resouse服务
查看>>
实验五
查看>>
文法分析
查看>>
记那次失败了的面试
查看>>
程序包+创建包规范+创建包体+删除程序包
查看>>
3-继承
查看>>
java中如何实现类似goto的作法
查看>>
海归千千万 为何再无钱学森
查看>>
vue2.0 仿手机新闻站(六)详情页制作
查看>>
FreeRTOS的内存管理
查看>>
JSP----九大内置对象
查看>>