Spring 全家桶之 Spring Boot 2.6.4(一)- Quickstart

简介: Spring 全家桶之 Spring Boot 2.6.4(一)- Quickstart

一、Spring Boot Quickstart

  首先Spring Boot是一个框架,基于Spring框架,用来简化Spring应用的开发,其次Spring Boot的口号是是约定大于配置,这是因为使用基于Spring、Spring MVC开发 Web 项目有很多缺点,例如非常多的配置文件、繁琐的部署流程以及复杂第三方集成等。Spring Boot可以化繁为简,非常快速的创建以及部署一个产品级的应用。

Spring Boot 可以:

  • 快速创建独立运行的Spring项目以及与主流框架集成
  • 使用嵌入式的Servlet容器如Tomcat,引用不需要达成War包
  • 有非常多的starters实现自动依赖与版本控制
  • 大量的自动配置,也可以自定义配置
  • 应用运行时监控

1.1 - Spring Boot 快速创建及部署应用

Spring Boot 快速创建应用

使用IDEA的Spring Initializr 可以快速创建Spring Boot工程

842aa04354fc45a397d482058d6fd5eb_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

在quickstart包下新建controller包,增加LilithController

@RestController
public class LilithController {
    @RequestMapping("/lilith")
    public String lilith(){
        return "Hello Lilith!";
    }
}
复制代码

运行qickstart包下的QuickstartApplication

11306bb3182344deb8cfec2dae966813_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

可以看出Tomcat已经在8080端口重新启动,并且征程Application启动。在浏览器输入 localhost:8080/lilith

image.png

浏览器显示了在代码中返回的信息。

相比通过Spring、Spring MVC创建项目需要大量的Spring配置以及Spring MVC配置,Spring Boot只需要添加一个spring-boot-starter-web依赖以及一个Controller类就可以完成,无需任何配置。

Spring Boot快速部署应用

Spring Boot不仅可以快速创建应用,还可以快速部署应用

点击右侧maven侧边栏中的Lifecycle下的package命令即可对应用进行打包

image.png

在终端进行项目应用下的target目录,使用java -jar运行JAR包

java -jar spring-boot-quickstark-0.0.1-SNAPSHOT.jar
复制代码

同样可以成功启动应用

Spring Boot工程目录介绍

image.png

使用Spring Initializr创建的项目中主要包含了

  • XxxxApplication:主程序,项目启动入口
  • resource:类路径下保存配置文件或者HTML资源等
  • static:保存所有静态资源,如css、js、images、icon等
  • template:保存html或者ftl模版页面,支持freemarker、thymeleaf等模版引擎
  • application.properties:Spring Boot应用配置文件,可以修改默认配置
  • XxxApplicationTests:自动生成的主程序测试类,其他测试类可以通过继承该类来使用Spring Test

二、Spring Boot 原理分析

2.1 - 版本及依赖管理

创建项目时选择了spring-boot-starter-web,该依赖并没有指定版本号,Spring Boot是如何确定依赖的版本号的?

pom.xml文件中唯一有版本号的地方是parent标签中的内容,导入了一个spring-boot-starter-parent作为父依赖,而spring-boot-starter-parent的父依赖是spring-boot-dependencies。

image.png

spring-boot-dependencies在properties标签中定义了很多依赖的版本号

image.png

再看pom.xml文件中dependency标签下的spring-boot-starter-web又依赖的哪些包?

image.png

依赖了Spring MVC、Spring Boot Tomcat Starter以及一些其他的starter,导入了web模块正常运行所需要的组件。

什么是Starters? Starters即启动器,是Spring Boot将功能场景组成的,项目中只要引入一个Starters,相关依赖都会导入进来。

查看Spring Boot官方文档中Starters

2.2 - 自动配置/主程序类

主程序类上的@SpringBootApplication注解非常重要,没有该注解程序就无法启动,该注解表名项目是一个Spring Boot项目,Spring Boot会通过运行@SpringBootApplication注解标注的类的main方法来启动应用

@SpringBootApplication

查看@SpringBootApplication注解源码

image.png

  • @Target(ElementType.TYPE):表示该注解是作用在类上
  • @Inherited:表示该注解是一个继承注解
  • @SpringBootConfiguration:这是一个Spring Boot配置类
  • @Configuration注解,既标注为配置类的意思
  • @Component注解:标注为应用程序的一个组件
  • @EnableAutoConfiguration: 开启自动配置功能,Spring Boot的自动配置配置需要该注解开启
  • @AutoConfigurationPackage:自动配置包
  • @Import(AutoConfigurationPackages.Registrar.class):@Import注解是Spring底层注解,用来导入组件,既导入AutoConfigurationPackages.Registrar.class

image.png

Deubg @Import注解导入Registrar

设置断点

image.png

选中“new PackageImports(metadata).getPackageNames()”点击鼠标右键,选择Evaluate Expression

image.png

点击Evaluate

image.png

Registrar的作用是将主程序类所在包以及所有子包下的Bean全都注册到Spring容器中

Deubg @Import注解 AutoConfigurationImportSelector

在getCandidateConfigurations方法左侧打上断点,并运行Dubg模式

image.png

会给容器中导入非常多的自动配置类,有了这些配置类就不用再手写配置了,那么这些配置是在哪里配置的呢?

重启启动Debug模式,来到AutoConfigurationImportSelector的第123行,点击Step Into;再点击Step Into选择进入loadFactoryNames方法内部;点击Step Over;到SpringFactoriesLoader类的第132行点击Step Into 进入loadSpringFactories方法内部。SpringFactoriesLoader类第136行这里首先会从缓存中获取classLoader,判断不为空之后直接返回所有配置类(去除之前的断点,将断点打在SpringFactoriesLoader类第136行,此时在进行debug,result为空),如果为空则会从配置文件中获取配置类

image.png

点击进入FACTORIES_RESOURCE_LOCATION,可以确定Spring Boot的自动配置类都存放在”META-INF/spring.factories“目录下

image.png

Spring Boot包含的自动配置类

image.png

Spring Boot在启动时从类路径下的”META-INF/spring.factories“获取EnableAutoConfiguration指定的值,将这些值代表的类导入Spring容器中,自动配置就会生效

image.png

WebMVC自动配置类配置

image.png

可以看出Spring Boot中Spring MVC的自动配置类包含了DispatchServlet等原先Spring MVC XML配置文件的内容。

以上就是Spring Boot的版本控制以及依赖管理✿✿ヽ(°▽°)ノ✿!


相关文章
|
1月前
|
XML Java 应用服务中间件
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
292 17
Spring Boot 两种部署到服务器的方式
|
1月前
|
监控 Java 应用服务中间件
SpringBoot是如何简化Spring开发的,以及SpringBoot的特性以及源码分析
Spring Boot 通过简化配置、自动配置和嵌入式服务器等特性,大大简化了 Spring 应用的开发过程。它通过提供一系列 `starter` 依赖和开箱即用的默认配置,使开发者能够更专注于业务逻辑而非繁琐的配置。Spring Boot 的自动配置机制和强大的 Actuator 功能进一步提升了开发效率和应用的可维护性。通过对其源码的分析,可以更深入地理解其内部工作机制,从而更好地利用其特性进行开发。
47 6
|
1月前
|
缓存 安全 Java
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
476 12
|
1月前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
91 8
|
2月前
|
缓存 前端开发 Java
【Spring】——SpringBoot项目创建
SpringBoot项目创建,SpringBootApplication启动类,target文件,web服务器,tomcat,访问服务器
|
3月前
|
监控 Java 数据库连接
详解Spring Batch:在Spring Boot中实现高效批处理
详解Spring Batch:在Spring Boot中实现高效批处理
531 12
|
3月前
|
安全 Java 测试技术
详解Spring Profiles:在Spring Boot中实现环境配置管理
详解Spring Profiles:在Spring Boot中实现环境配置管理
187 10
|
2月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
215 5
|
3月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
89 2
|
4月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
145 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块