1. 什么是SpringBoot?
SpringBoot是一个快速开发框架,快速的将一些常用的第三方依赖整合(原理:通过Maven子父工程的方式),简化XML配置,全部采用注解形式,内置Http服务器(Jetty和Tomcat),最终以java应用程序进行执行
2.为什么使用SpringBoot
Spring Boot是一种 基于Spring框架的快速开发应用程序的工具。以下是使用
Spring Boot的一些好处:
快速开发: Spring Boot提供了一系列的自动配置,使得开发者不必从零开
始配置Spring应用程序,从而可以快速地构建应用程序。
简化配置: Spring Boot可以通过各种自动配置来简化应用程序的配置,开
发者不必手动配置和管理各种依赖关系。
微服务支持: Spring Boot对微服务的支持很好,可以使用Spring Cloud构建
复杂的微服务体系结构。
生态系统支持: Spring Boot受到广泛的支持,有很多插件和工具可以与其
集成,以便更好地支持开发人员。
易于维护:,SpringBoot代码的可读性和可维护性很高,这使得应用程序的
维护变得容易。
总之,Spring Boot通过简化应用程序的开发和部署,提高了开发人员的工作效
率,并降低了应用程序的维护成本。
3.Spring Boot的核心注解是哪个?它主要由哪几个注解组成的
Spring Boot的核心注解是@SpringBootApplication.
@SpringBootApplication是一个组合注解,由以下三个注解组成:
@Configuration:表明该类是一个Spring配置类
@EnableAutoConfiguration:启用Spring Boot的自动配置机制。
@ComponentScan:告诉Spring 扫描哪些包来查找注解的组件,如控制器、服务等。
这三个注解的组合提供了基本的SpringBoot应用程序配置,以及启用自动配置
和组件扫描。除此之外,Spring Boot还有很多其他的注解,如
@RestController. @Service、 @Repository 等,用于指定特定类型的组件
4.设置应用类型
应用类型分为三种,都在WebApplicationType
这个枚举类中,如下:
1. NONE :顾名思义,什么都没有,正常流程走,不额外的启动web容器,比如Tomcat
2. SERVLET :基紆servlet的web程序,需要启动内嵌的servlet web容器,比如Tomcat
3. REACTIVE :基纡reactive的web程序,要启动内嵌reactive web容器
判断的依据很简单,就是加载对应的类,比如加载了DispatcherServlet
等则会判断是Servlet
的web程序。源码如下:
static WebApplicationType deduceFromClasspath() {
if (ClassUtils.isPresent("org.springframework.web.reactive.DispatcherHandler", (ClassLoader)null) && !ClassUtils.isPresent("org.springframework.web.servlet.DispatcherServlet", (ClassLoader)null) && !ClassUtils.isPresent("org.glassfish.jersey.servlet.ServletContainer", (ClassLoader)null)) {
return REACTIVE;
} else {
String[] var0 = SERVLET_INDICATOR_CLASSES;
int var1 = var0.length;
for(int var2 = 0; var2 < var1; ++var2) {
String className = var0[var2];
if (!ClassUtils.isPresent(className, (ClassLoader)null)) {
return NONE;
}
}
return SERVLET;
}
}
5.设置初始化器(Initializer)
初始化器ApplicationContextInitializer 是个好东西,用于IoC容器刷新之前初始化一些组
件,比如ServletContextApplicationContextInitializer
private <T> Collection<T> getSpringFactoriesInstances(Class<T> type, Class<?>[] parameterTypes, Object... args) {
ClassLoader classLoader = this.getClassLoader();
Set<String> names = new LinkedHashSet(SpringFactoriesLoader.loadFactoryNames(type, classLoader));
List<T> instances = this.createSpringFactoriesInstances(type, parameterTypes, classLoader, args, names);
AnnotationAwareOrderComparator.sort(instances);
return instances;
}
相对重要的就是第一步获取初始化器的名称了, 这个肯定是全类名了,详细源码肯定在
loadFactoryNames()方法中了,跟着源码进入,终调用的是#SpringFactoriesloader . loadSspringFactories()方法。
loadSpringFactories()方法就不再详细解释了,实就是从类路径META-INF/spring. factories中加载ApplicationContextInitializer的值。
6.监听器
在sping B0,监视器(Monitor) 是指一组用于监 视应用程序运行时状态的工具和组件。
Spring Boot中的监视器包括以下几个方面:
Actuator: Actuator 是Sprig Boot的- 个功能模块,它提供了一系列用于监
视和管理Spring Boot应用程序的端点(Endpoints) ,包括健康检查、度量指
标、配置信息、日志等。可以通过HTTP或JMX等多种方式访问这些端点,获
取应用程序的状态信息和运行时指标。
Spring Boot Admin: Spring Boot Admin是一个针对Spring Boot应用程序的
监视和管理工具,它基于Actuator端点提供了可视化的Web界面,可以实时查
看应用程序的状态信息、监控指标和日志,还支持在线查看和修改配置、热部
署和远程调试等功能。
Logging: Spring Boot集成了Logback、 Log4j2 等多个日志框架,可以通过配
置文件或代码的方式对日志进行管理和监控,例如设置日志级别、输出格式、
文件位置等。另外,Spring Boot还提供了一些日志相关的Actuator端点,可以
动态修改日志级别、查看日志内容等。
总结
SpringApplication
的构建都是为了run()
方法启动做铺垫,构造方法中总共就有几行代码,最重要的部分就是设置应用类型、设置初始化器、设置监听器。