【java框架系列】spring boot核心类和扩展点

概述

本文参考资料

官方blog: https://spring.io/blog/2017/10/17/spring-boot-1-5-8-available-now
官方文档: https://docs.spring.io/spring-boot/docs/1.5.8.RELEASE/reference/pdf/spring-boot-reference.pdf

温馨提示

如果能看到英文版的官方文档,就不建议继续往下阅读浪费时间,谢谢。

本文背景

从2016年接触,2017年全面升级到spring boot,差不多也有一段时间了。spring boot也升级了多个版本。

关于spring boot系列

spring.io在spring boot和springcloud推出之前,开源了很多的框架(见下文附录),但是除了spring framework自身,影响力都不够。直到spring boot、spring cloud系列框架推出,才成了spring框架的扩展中最有影响力的两个(或者说集大成者)。
Spring Boot的设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
通俗点理解,就是spring boot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了很多的jar包,比如散落在各处的spring框架:spring amqp、spring data redis client、spring web service,进而集大成。
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具,例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,领导选举,分布式会话,集群状态。
从技术实现上来说,也是集成开源届的各种方案比如 client、rabbitmq client、eureka client。

springboot1.5.x(非web)的核心类

写一个非web的demo程序,并调试下程序,得出如下一张图(一图胜千言)。总结起来就两条主线:

springapplication构造函数

springboot构造函数,有扩展点:applicationListener、applicationContextinitializer。
Application启动运行过程中各种事件的监听器,如SpringApplicationEvent、ApplicationContextEvent、Environment相关Event等诸多事件。很多非官方的框架都是基于这两个扩展点做的开发。

springapplication.run

run第一步(实例化和初始化bean)

这一步有扩展点:initializingbean、BeanPostProcessor、

run第二步(触发监听)

springapplication构造函数初始化的applicationlistener、applicationContextinitializer有活干了。

run第三步(自动装配)

这一步有扩展点:EnableAutoConfiguration

springboot 扩展点

initializingbean

可以在bean初始化完成,所有属性设置完成后执行特定逻辑,例如对自动装配对属性进行验证等等,将mysql的数据导入到redis中。

BeanFactoryPostProcessor

是beanFactory后置处理器,支持在bean factory标准初始化完成后,对bean factory进行一些额外处理。在讲context初始化流程时介绍过,这时所有的bean的描述信息已经加载完毕,但是还没有进行bean初始化。

BeanPostProcessor

提供了在bean初始化之前和之后插入自定义逻辑的能力。与BeanFactoryPostProcessor的区别是处理的对象不同,BeanFactoryPostProcessor是对beanfactory进行处理,BeanPostProcessor是对bean进行处理。

扩展点applicationListener

很重要的一个扩展点。监听各种事件
扩展这个类,可以关闭banner的打印。

applicationContextinitializer

这个类一般做业务开发时,很少有场景会用到。

EnableAutoConfiguration

启用自动配置,加载所有的spring.factories配置文件的配置类。

附录