本文属于原创,转载注明出处,欢迎关注微信小程序 小白AI博客
微信公众号 小白AI
或者网站 https://xiaobaiai.net
[TOC]
在上一篇文章中我们已经详解介绍了 Spring boot
相关的概念、特性以及周边知识,这一篇文章我们继续深入。我们知道 Spring boot
是一个入口,利用 Spring Boot
提供的核心组件可以很方便的、 快速的
(Boot)创建或配置实际项目,接下来我们来了解 Spring boot
都包含了哪些核心模块(组件),以及 Spring boot
是如何运转起来的,最后通过一个实际的 Hello World
项目来说明。
名词术语 | 释义 |
---|---|
CLI | 命令行界面,command-line interface |
Marven | Apache Maven是一个软件项目管理和综合工具,构建自动化系统(如Make,CMake)。基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件。Maven简化和标准化项目建设过程,处理编译,分配,文档,团队协作和其他任务的无缝连接。 Maven增加可重用性并负责建立相关的任务;Marven拥有依赖管理功能,它通过简单的配置就可以自动从网络上下载项目所需的依赖 |
POM | 项目对象模型(Project Object Model),它是Maven项目中的文件,使用XML表示,名称叫做pom.xml;该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等;Maven世界中,project可以什么都没有,甚至没有代码,但是必须包含pom.xml文件 |
Gradle | Gradle是一个完全开源的构建自动化系统,使用特定编程语言Groovy来书写配置文件,不同于Marven使用XML。如Android开发IDE Android Studio默认就是使用Gradle来构建项目;Gradle与Maven相比更为灵活,简单。 |
Groovy | Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,最终会编译成JVM字节码,它是一种动态编程语言,即可以面向对象编程,也可以用作纯粹的脚本语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy也可以使用其他非Java语言编写的库。像 Kotlin, Scala也都是工作在JVM之上的;语法跟Java语法特别相似;Apache2.0授权;不像Java,所有依赖包是默认导入的; |
Spring IoC容器 | 它是Spring框架的核心。IoC容器从XML文件,Java注解或Java代码接收元数据。容器通过读取提供的配置元数据,从简单的普通Java对象(Plain Old Java Objects, POJO)获取有关要实例化,配置和组装哪些对象的指令。这些通过此过程创建的对象称为Spring Beans。 |
JDK8 | JDK8或者JDK1.8是由于自从JDK1.5/JDK5命名方式改变后遗留的新旧命令方式问题。所以JDK8或者JDK1.8也是同一个东西。 |
STS | Spring Tool Suite |
Spring Boot
主要几个核心模块:
:bulb: 下面的操作看不懂或者理解很模糊,先别慌,后面会深入讲解的。因为我现在自己也没彻底搞懂,怕带歪你们,都是摘取官方文档中汇总而来的。
SpringApplication
类可用于从 Java main
方法引导和启动Spring应用程序。默认情况下,该class将执行以下步骤来引导应用程序: ApplicationContext CommandLinePropertySource ApplicationContext CommandLineRunner
在大多数情况下,可以直接从主方法中调用静态 run(Class, String [])
方法来引导应用程序:
@Configuration @EnableAutoConfiguration public class MyApplication { // ... Bean definitions public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }复制代码
对于更高级的配置,可以在运行之前创建和定制 SpringApplication
实例:
public static void main(String[] args) { SpringApplication application = new SpringApplication(MyApplication.class); // ... customize application settings here application.run(args) }复制代码
SpringApplications
可以从各种不同的来源读取beans。通常建议使用单个 @Configuration
类来引导你的应用程序,但是,你也可以从以下位置设置来源:
AnnotatedBeanDefinitionReader
加载的完全限定的类名 XmlBeanDefinitionReader
加载的XML资源的位置,或 GroovyBeanDefinitionReader
加载的 groovy
脚本 ClassPathBeanDefinitionScanner
扫描的软件包的名称 配置属性(Configuration properties)也绑定到 SpringApplication
。这样就可以动态设置 SpringApplication
属性,例如用于指示Web环境的标记(" spring.main.web-application-type=none")或其他来源( "spring.main.sources" -a CSV list
)。标志以关闭banner("spring.main.banner-mode=off")。
4) 方便的 ApplicationContext
初始化程序,包括对合理的日志记录默认值的支持
总之,就是 spring-boot
模块对应用程序的初始化、配置、启动以及提供可选WEB运行容器有着很好的支持。
Spring Boot Starters
是 Spring Boot Framework
的主要关键功能或组件之一。 Spring Boot Starter
的主要职责是将一组常见或相关的依赖项组合为单个依赖项,从而可以自动化导入全部依赖。
例如,我们想用 Tomcat WebServer
开发一个 Spring WebApplication
。然后,我们需要在 Maven
的 pom.xml
文件或 Gradle
的 build.gradle
文件中添加以下最小 jar
依赖项
如果还需要添加一些数据库内容,则需要添加与数据库相关的jar,例如 Spring JDBC jar
文件, Spring ORM jar
文件, Spring Transaction Jar
文件等。
最后,我们需要在构建文件中定义很多依赖项,对于开发人员而言,这是非常繁琐且繁琐的任务,而且它还会增加我们的构建文件大小。有什么解决方案可以避免在构建文件中出现如此多的依赖项定义?解决方案是 Spring Boot Starter
组件。 Spring Boot Starter
组件将所有相关的 jar
组合到单个 jar
文件中,因此我们只需要将 jar
文件依赖项添加到我们的构建文件中。无需将上述这么多个jar文件添加到我们的构建文件中,我们在 Spring boot
中利用 Spring Boot Starter
特性,需要添加一个并且仅添加一个jar文件: spring-boot-starter-web
jar文件就可以了。当我们将 spring-boot-starter-web
jar文件依赖项添加到我们的构建文件中时, Spring Boot Framework
将自动下载所有必需的 jar
并添加到我们的项目类路径中,如下图所示。
总结下来,sping-boot-staters的主要优点就是:
在没有 Spring Boot
出来之前,比如使用 Spring MVC
框架开发应用需要大量配置,XML各种配置,注解满天飞(我没亲身经历过,不过特意去查了下,确实),到了 Spring boot
这里如何解决,那就是 spring-boot-autoconfigurator
模块了。它主要职责是减少Spring配置。如果我们在 Spring Boot
中开发Spring应用程序,那么我们就不需要定义单个XML配置,而几乎不需要或只需很少的 Annotation
(注解)配置。 Spring Boot AutoConfigurator
组件将负责提供这些信息。
举个例子,如果我们在项目构建文件中使用"spring-boot-starter-web" jar文件,则 Spring Boot AutoConfigurator
将自动解析视图(views),视图解析器(view resolvers)等。而且, Spring Boot
减少了注释配置的定义。如果我们在类级别使用 @SpringBootApplication
注释,那么 Spring Boot AutoConfigurator
将 自动
将所有必需的注释添加到Java类ByteCode中。
如果我们阅读 Spring Boot Documentation
,我们可以为 @SpringBootApplication
找到以下定义。
@Target(value=TYPE) @Retention(value=RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters={@ComponentScan.Filter(type=CUSTOM,classes=TypeExcludeFilter.class),}) @ConfigurationPropertiesScan public @interface SpringBootApplication复制代码
也就是说, @SpringBootApplication = @Configuration + @ComponentScan + @EnableAutoConfiration
。
简而言之,
Spring Boot Starter
减少了构建的依赖性,而 Spring Boot AutoConfigurator
减少了Spring配置。 Spring Boot Starter
依赖于 Spring Boot AutoConfigurator
, Spring Boot Starter
自动触发 Spring Boot AutoConfigurator
。 Spring Boot CLI
(命令行界面)是一种 Spring Boot
软件,用于从命令提示符下运行和测试 Spring Boot
应用程序。Spring命令行应用程序可以编译并运行 Groovy
源代码(采用"spring"命令),这使得编写绝对的最少代码以使应用程序运行变得非常容易。 Spring CLI
还可以监视文件,并在文件更改时自动重新编译并重新启动。
spring 命令行示例:
spring run HelloWorld.groovy复制代码
具体的Spring Boot CLI工具怎么安装和使用,下面我们会具体讨论。
Spring Boot Actuator
有很多功能,但是主要的功能就是:
Spring Boot Actuator
提供了执行器端点所需的基础架构。它包含对执行器端点的注释支持。开箱即用。 HealthEndpoint
, EnvironmentEndpoint
, BeansEndpoint
等。 当我们使用CLI运行 Spring Boot Web
应用程序时, Spring Boot Actuator
会自动提供主机名"localhost"和默认端口号"8080"。我们可以使用"http://localhost:8080 /"端点访问此应用程序。但是我们实际上使用HTTP请求方法(例如GET和POST)来使用 Spring Boot Actuator
表示管理端点。后面我们再来详细了解Actuator吧。
:bulb:上面大概知道了核心模块都能干些啥,不过具体细节的,我们在实际工程中再来体会,除了上述核心模块,另外有Spring Initilizr Web工具来快速配置生成一个Spring Boot项目。
了解 Spring boot
是如何减少依赖和配置的原理,这是有一定必要的。了解 Spring Boot
如何减少构建的依赖关系, Spring Configuration
等, Spring Boot
是如何在后台运行的。
如果熟悉Groovy编程语言的话,那么你会了解大多数内容。在 Groovy
中,我们不需要添加一些导入,也不需要在Groovy项目中添加一些依赖项。当我们使用 Groovy Compiler(groovyc)
编译Groovy脚本时,它将自动添加所有默认导入语句,然后对其进行编译。同样, Groovy
编程语言包含一个JAR依赖关系解析器,用于解析所有必需的jar文件并将其添加到 Groovy Project
类路径。 Spring Boot
在内部使用Groovy添加一些默认值,例如 Default import
语句, Application main()
方法等。当我们从CLI命令提示符运行Groovy脚本时,它使用此 main()
方法运行 Spring Boot Application
。
Grape
是嵌入式依赖关系解决方案引擎。Grape是嵌入Groovy的JAR依赖管理器。Grape让我们快速将 maven
信息库依赖项添加到我们的项目类路径中,以减少构建文件的定义。 Spring Boot
框架编程模型主要是受Groovy编程模型启发的。 Spring Boot
框架在内部取决于这两个主要组件: Groovy
和 Grape
。
具体地可以详细了解 Grape JAR依赖项管理器 。
好了,上面说了这么多,不容易,就是为了做个铺垫,让我们知道 Spring boot
有哪些核心地东西,都是干啥用的,接下来就正式进入实践环节了,我们从开发环境入手。
从 Spring boot
官方提供的系统需求来看(Spring Boot 2.2.0):
Spring Boot
应用程序部署到任何 Servlet 3.1+
兼容的容器中)
我们选定相关软件版本:
Spring Boot
。因此,在类路径中包含相应的 spring-boot-*.jar
文件即可。 :bulb:目前为止已经是JDK13了,这里指的是OpenJDK,Oracle已经在2019年4月16日更改了Oracle JDK许可证(从Java11开始);另外Open JDK应用到生产环境已经经过验证了的,没有问题。 Spring Boot 2.2.0.RELEASE需要Java 8版本,并且与Java 13(包括)兼容 ;另外我们可以使用其他IDE,例如IntelliJ IDEA,NetBeans或Eclipse,同样,也可以使用其他构建工具,例如Gradle。
:bulb:安装JDK的方式可以有多种,如在类Linux平台中可以通过安装管理工具直接从远程镜像源拉取安装;
安装好STS后,打开软件--> Window
--> Preferences
--> Java
--> Installed JREs
:
Marven在安装好STS后,已经默认内部安装了,不过想要另外指定Marven版本也是可以的,打开STS--> Window
--> Preferences
--> Marven
--> Installations
--> Add
添加:
这一篇我们开始从内部了解 Spring boot
,从它的几个核心模块讲起,知道了 Spring boot
是如何减少组件依赖和简化繁杂的配置的,以及讲述了 Spring boot
减少组件依赖和简化繁杂配置的内部原理,最后开始进入 Spring boot
实践,完成了 Spring boot
的开发环境搭建。至此,我们开始慢慢走进 Spring boot
。加油!
本文属于原创,转载注明出处,欢迎关注CSDN freeape 或微信小程序 小白AI博客
微信公众号 小白AI
或者网站 xiaobaiai.net