什么是 Spring Boot
Spring Boot 是 Spring 开源组织下的子项目,简化了 Spring的开发,省去繁重的xml文件配置,提供了各种启动器(starter),使开发者能快速上手,更加专注业务开发,提高开发效率。
Spring Boot 有哪些优点
- 容易上手,提升开发效率,为 Spring 开发提供一个更快、更简单的开发框架。
- 开箱即用(指在pom.xml文件中加入需要的依赖包),远离繁琐的配置。
- 提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等。
- SpringBoot总结就是使编码变简单、配置变简单、部署变简单、监控变简单等
Spring Boot常用注解
- @SpringBootApplication:该注解是Spring Boot项目的入口注解,用于标识一个类是Spring Boot的主配置类。是Spring Boot的核心注解,由@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan 三个注解组合而成
- @SpringBootConfiguration : 与@Configuration注解的功能一致,被标注的类等于在Spring的XML配置文件中(applicationContext.xml),装配所有bean事务,提供了一个Spring的上下文环境
- @EnableAutoConfiguration : SpringBoot根据应用所声明的依赖来对Spring框架进行自动配置
- ComponentScan : 组件扫描,自动扫描和装配Bean。标识扫描路径,因为默认是没有配置实际扫描路径,所以SpringBoot扫描的路径是启动类所在的当前⽬录
- @RestController:该注解用于创建RESTful风格的Controller,相当于@Controller和@ResponseBody的组合。
- @GetMapping/@PostMapping:这两个注解用于处理HTTP GET/POST请求,根据请求路径匹配到相应的处理方法。
- @PathVariable:该注解配合@RequestMapping使用,用于获取URL路径中的参数值。
- @RequestParam:该注解也配合@RequestMapping使用,用于获取请求参数的值。
- @Autowired:该注解用于自动装配一个Bean,Spring容器会自动找到合适的Bean进行注入。
- @ConfigurationProperties:该注解用于将配置文件中的属性值注入到Java Bean中。
- @Component:该注解用于将一个普通的Java类定义为一个Bean,使其能够被Spring容器管理。
- @SpringBootTest:该注解用于测试Spring Boot应用程序,可以模拟出完整的Web服务接口供测试调用。
Spring Boot自动装配的过程
Spring Boot通过@EnableAutoConfiguration注解开启自动配置
通过SpringFactoriesLoader扫描autoconfigure包下的META-INF/spring.factories中所有路径下的类,并通过反射实例化成一个个的配置类并注入到Spring容器中,从而实现了自动装配
Spring Boot启动流程
- 首先,SpringBoot会读取配置文件与启动类,配置文件指定了项目的各种配置信息,启动类是应用程序的入口。
- 然后,SpringBoot会使用Spring框架初始化Spring容器,包含创建bean实例、依赖注入等操作。
- 接着,SpringBoot会开启自动配置功能,扫描项目中的类,自动注册bean,以便于可以方便地使用。
- 在完成了自动配置后,SpringBoot会启动内嵌的Web服务器,比如Tomcat或Jetty,在Web服务器上部署应用程序。
- 最后,SpringBoot会启动应用程序本身,启动相应的线程进行服务处理。
如何理解 Spring Boot 中的 Starter
在 Spring Boot 中,Starter 是一种特殊的依赖包,用于简化和快速启动特定功能或技术栈的应用程序开发。它提供了一组预配置的依赖项和默认配置,以便开发人员可以更轻松地集成和使用特定的功能。
starter就是定义⼀个starter的jar包,写⼀个@Configuration配置类、将这些bean定义在⾥⾯,然后在starter包的META-INF/spring.factories中写⼊该配置类,springboot会按照约定来加载该配置类
开发⼈员只需要将相应的starter包依赖进应⽤,进⾏相应的属性配置(使⽤默认配置时,不需要配置),就可以直接进⾏代码开发,使⽤对应的功能了,⽐如mybatis-spring-boot–starter,spring-boot-starter-redis
Spring Boot是如何启动Tomcat的
在 Spring Boot 中,Tomcat 是默认的嵌入式 Web 服务器。
使用 Spring Boot 创建一个 Web 应用程序时,通常会添加 spring-boot-starter-web
依赖项,会自动引入 Tomcat 作为嵌入式 Web 服务器的实现。
下面是 Spring Boot 如何启动 Tomcat 的简要过程:
- 在启动应用程序时,Spring Boot 会自动在类路径上查找并加载适当的 Tomcat 类。
- Spring Boot 根据内置的默认配置创建一个 Tomcat 实例,并对其进行必要的配置。
- Tomcat 实例会创建一个基于线程池的 Connector,用于监听传入的 HTTP 请求。
- Spring Boot 根据应用程序配置(如端口号)设置 Connector 的属性。
- Spring Boot 将 Web 应用程序的 WAR 文件或可执行 JAR 文件部署到 Tomcat 实例中。
- Tomcat 启动并开始监听指定端口上的请求。
- 当收到 HTTP 请求时,Tomcat 调用 Spring Boot 中的 DispatcherServlet 处理请求,并将其分派给相应的控制器。
- 控制器处理请求并生成响应,然后返回给 Tomcat。
- Tomcat 将响应发送回客户端。
Tomcat和Servlet
Tomcat(全称为Apache Tomcat)是一个开源的、轻量级的、独立的Java Web应用服务器。它实现了Java Servlet、JavaServer Pages(JSP)、Java Expression Language(EL)等相关技术规范,并提供了一个运行和管理这些Web技术的环境。
Servlet 是 Java Web 开发中的一种技术,用于处理来自客户端的请求并生成相应的响应。它是基于 Java 的服务器端组件,主要运行在 Servlet 容器(如 Tomcat)中。
Servlet 可以接收客户端发送的请求,执行一些逻辑处理,并生成动态的网页内容作为响应返回给客户端。
Servlet 主要用于处理 HTTP 请求,包括 GET、POST 等方法。开发者可以通过覆写 Servlet 中对应的方法,如 doGet()
和 doPost()
方法,在其中编写处理请求的业务逻辑。
Tomcat 和 Servlet 之间的关系可以理解为:
- Servlet 规范:Servlet 规范是 Java Enterprise Edition (Java EE) 的一部分,定义了开发基于 Java 的 Web 应用程序的标准。它规定了 Servlet 是如何编写和运行的,以及与容器进行交互的方式。
- Tomcat 的角色:Tomcat 充当了 Servlet 容器的角色,它实现了 Servlet 规范并提供了一个运行和管理 Servlet 的环境。Tomcat 负责加载、实例化和管理 Servlet,并在收到客户端请求时将请求转发给适当的 Servlet 进行处理。
- 部署 Servlet:通过将自己编写的 Servlet 部署到 Tomcat 中,Tomcat 将负责对 Servlet 进行生命周期管理,包括初始化 Servlet、调用 Servlet 的方法(如
doGet()
、doPost()
等)处理请求和生成响应,以及销毁 Servlet。
Tomcat 是一个实现了 Servlet 规范的容器,它提供了运行和管理 Servlet 的环境。通过部署 Servlet 到 Tomcat,我们可以利用 Servlet 技术来开发 Java Web 应用程序,并由 Tomcat 在运行时负责管理和执行 Servlet 的相关操作。