关于SpringBoot,大致可分为基础技术和衍生技术。
基础技术主要是关于SpringFramework的,那SpringFramework中,我们可大致分为几块:
Spring 模式注解:例如@Service、@Component等,详情见之前文章。
Spring 应用上下文:无需多解释,核心组件,用来装配bean、相应的生命周期。
Spring 工厂加载机制:之前文章自动装配。
Spring 应用上下文初始化器:在spring上下文没有初始化之前做一些调整和变化等。
Spring Environment抽象接口:一个环境,统一所有环境,包括配置属性、profile等。
Spring 应用事件/监听器:扩展了java应用监听的方式。
衍生技术或者是SpringFramework的衍生技术,主要是SpringBoot的特性:
SpringApplication
SpringApplication Builder API:之前文章有用过,可以进行链式编写,比较方便。
SpringApplication运行监听器
SpringApplication参数
SpringApplication故障分析
SpringBoot应用事件/监听器
SpringApplication官方定义:SpringApplication类通过其中的main方法来引导Spring应用启动。很多情况下都可以使用SpringApplication.run的静态方法的方式启动。
所以SpringApplication是Spring应用的引导类,可以提供便利的自定义行为方法。
使用场景:嵌入式Web应用和非Web应用
拓展:web应用分为嵌入式场景和非嵌入式场景,springboot可以部署在Tomcat7、jetty7、servlet容器中,部署在servlet容器中时,SpringApplication就不能用了。
自定义SpringApplication
通过SpringApplication的API调整
SpringApplication springApplication = new SpringApplication(Application.class);
springApplication.setBannerMode(Banner.Mode.CONSOLE);
springApplication.setWebApplicationType(WebApplicationType.NONE);
springApplication.setAdditionalProfiles("prod");
springApplication.setHeadless(true);
通过SpringApplicationBuilder的API调整
new SpringApplicationBuilder(Application.class)
.bannerMode(Banner.Mode.CONSOLE)
.web(WebApplicationType.NONE)
.profiles("prod")
.headless(true)
.run(args);
SpringApplication准备阶段
配置:Spring Bean来源
在Spring启动时,很多功能组件是以bean的方式承载的,而bean的配置需要来源,java配置class或xml上下文配置文件集合,用于springboot的BeanDefinitionLoader读取,并将配置源解析加载为Spring Bean定义。
java配置方式:SpringApplication就是一个配置源,@SpringApplication中包含@Component,所以这个类就是个源,在上面代码new SpringApplication时,把自身这个类配置进去。
对于SpringApplicationBuilder,看源码可以看出,来源可以不止一个。
通常情况下,我们会用main方法启动,如下
/**
* {@link SpringApplication} 引导类
*/
@SpringBootApplication
public class SpringApplicationBootstrap {
public static void main(