资讯专栏INFORMATION COLUMN

springBoot的工作机制--springBoot揭秘

hover_lew / 3213人阅读

摘要:文章目录的核心注解的执行流程的扩展点的核心注解内含个子注解该注解用于中,被该注解标注的表示,该类是个配置类。通知完毕调用的。

文章目录
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注解标注顺序

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71078.html

相关文章

  • spring boot - 收藏集 - 掘金

    摘要:引入了新的环境和概要信息,是一种更揭秘与实战六消息队列篇掘金本文,讲解如何集成,实现消息队列。博客地址揭秘与实战二数据缓存篇掘金本文,讲解如何集成,实现缓存。 Spring Boot 揭秘与实战(九) 应用监控篇 - HTTP 健康监控 - 掘金Health 信息是从 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring...

    rollback 评论0 收藏0
  • SpringBoot下使用定时任务方式全揭秘

    摘要:定时任务间隔时间方式执行一次定时任务线程休眠规定时间类类允许调度一个任务。引入依赖配置测试执行一次定时任务使用注解是为定时任务而生的一个注解,查看注解的源码表达式接收一个。 本文旨在用通俗的语言讲述枯燥的知识 定时任务作为一种系统调度工具,在一些需要有定时作业的系统中应用广泛,如每逢某个时间点统计数据、在将来某个时刻执行某些动作...定时任务在主流开发语言均提供相应的API供开发者调用...

    DevTTL 评论0 收藏0
  • SpringBoot非官方教程 | 第十三篇:springboot集成spring cache

    摘要:本文介绍如何在中使用默认的声明式缓存定义和接口用来统一不同的缓存技术。在使用集成的时候,我们需要注册实现的的。默认使用在我们不使用其他第三方缓存依赖的时候,自动采用作为缓存管理器。源码下载参考资料揭秘与实战二数据缓存篇快速入门 本文介绍如何在springboot中使用默认的spring cache 声明式缓存 Spring 定义 CacheManager 和 Cache 接口用来统一不...

    Magicer 评论0 收藏0
  • 那些年我看过书 —— 致敬我大学生活 —— Say Good Bye !

    摘要:开头正式开启我入职的里程,现在已是工作了一个星期了,这个星期算是我入职的过渡期,算是知道了学校生活和工作的差距了,总之,尽快习惯这种生活吧。当时是看的廖雪峰的博客自己也用做爬虫写过几篇博客,不过有些是在前人的基础上写的。 showImg(https://segmentfault.com/img/remote/1460000010867984); 开头 2017.08.21 正式开启我...

    xiaoqibTn 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<