Spring Boot从零入门2_核心模块详述和开发环境搭建

本文属于原创,转载注明出处,欢迎关注微信小程序小白AI博客 微信公众号小白AI或者网站 https://xiaobaiai.nethtml

[TOC]java

1 前言

在上一篇文章中咱们已经详解介绍了Spring boot相关的概念、特性以及周边知识,这一篇文章咱们继续深刻。咱们知道Spring boot是一个入口,利用Spring Boot提供的核心组件能够很方便的、快速的(Boot)建立或配置实际项目,接下来咱们来了解Spring boot都包含了哪些核心模块(组件),以及Spring boot是如何运转起来的,最后经过一个实际的Hello World项目来讲明。git

2 名词术语

名词术语 释义
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

3 Spring Boot核心模块

Spring Boot主要几个核心模块:github

  • spring-boot(主模块),提供了支持Spring Boot其余部分的功能
  • spring-boot-starters(起步依赖)
  • spring-boot-autoconfigure(自动配置)
  • spring-boot-cli(命令行界面)
  • spring-boot-actuator(执行器)
  • spring-boot-actuator-autoconfigure
  • spring-boot-test
  • spring-boot-loader
  • spring-boot-devtools
  • ......

3.1 spring-boot(主模块)

💡 下面的操做看不懂或者理解很模糊,先别慌,后面会深刻讲解的。由于我如今本身也没完全搞懂,怕带歪大家,都是摘取官方文档中汇总而来的。

1) SpringApplication 类:web

  • 该模块其中的SpringApplication类可用于从Java main方法引导和启动Spring应用程序。默认状况下,该class将执行如下步骤来引导应用程序:spring

    • 建立一个适当的ApplicationContext实例(取决于你的类路径)
    • 注册一个CommandLinePropertySource以将命令行参数公开为Spring的属性(properties)
    • 刷新应用程序上下文(ApplicationContext),加载全部单例bean
    • 触发任何CommandLineRunnerbean

在大多数状况下,能够直接从主方法中调用静态run(Class, String [])方法来引导应用程序:数据库

@Configuration
@EnableAutoConfiguration
public class MyApplication  {

    // ... Bean definitions

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

对于更高级的配置,能够在运行以前建立和定制SpringApplication实例:apache

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")。小程序

2) 提供嵌入式Web应用程序,使用可选择容器(Tomcat,Jetty或Undertow)

3) 一流的外部化配置支持

4) 方便的ApplicationContext初始化程序,包括对合理的日志记录默认值的支持

总之, 就是spring-boot模块对应用程序的初始化、配置、启动以及提供可选WEB运行容器有着很好的支持。

3.2 spring-boot-starters(起步依赖)

Spring Boot StartersSpring Boot Framework的主要关键功能或组件之一。Spring Boot Starter的主要职责是将一组常见或相关的依赖项组合为单个依赖项,从而能够自动化导入所有依赖。

例如,咱们想用Tomcat WebServer开发一个Spring WebApplication。而后,咱们须要在Mavenpom.xml文件或Gradlebuild.gradle文件中添加如下最小jar依赖项

  • Spring core Jar file(spring-core-xx.jar)
  • Spring Web Jar file(spring-web-xx.jar)
  • Spring Web MVC Jar file(spring-webmvc-xx.jar)
  • Servlet Jar file(servlet-xx.jar)

若是还须要添加一些数据库内容,则须要添加与数据库相关的jar,例如Spring JDBC jar文件,Spring ORM jar文件,Spring Transaction Jar文件等。

  • Spring JDBC Jar file(spring-jdbc-xx.jar)
  • Spring ORM Jar file(spring-orm-xx.jar)
  • Spring Transaction Jar file(spring-transaction-xx.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的主要优势就是:

  • 减小了许多依赖的定义,简化了项目构建的依赖
  • 简化了项目构建的依赖关系

3.3 spring-boot-autoconfigure(自动配置)

在没有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 AutoConfiguratorSpring Boot Starter自动触发Spring Boot AutoConfigurator

3.4 Spring Boot CLI(命令行界面)

Spring Boot CLI(命令行界面)是一种Spring Boot软件,用于从命令提示符下运行和测试Spring Boot应用程序。Spring命令行应用程序能够编译并运行Groovy源代码(采用"spring"命令),这使得编写绝对的最少代码以使应用程序运行变得很是容易。Spring CLI还能够监视文件,并在文件更改时自动从新编译并从新启动。

spring 命令行示例:

spring run HelloWorld.groovy

具体的Spring Boot CLI工具怎么安装和使用,下面咱们会具体讨论。

3.5 spring-boot-actuator(执行器)

Spring Boot Actuator有不少功能,可是主要的功能就是:

  • 对应用程序进行健康检查(health check-up),审核(auditing),指标收集(metrics gathering)和监控,全部这些功能均可以经过JMX或HTTP端点进行访问。
  • Spring Boot Actuator提供了执行器端点所需的基础架构。它包含对执行器端点的注释支持。开箱即用。
  • 此模块提供许多端点,包括HealthEndpointEnvironmentEndpointBeansEndpoint等。

当咱们使用CLI运行Spring Boot Web应用程序时,Spring Boot Actuator会自动提供主机名"localhost"和默认端口号"8080"。咱们可使用"http://localhost:8080 /"端点访问此应用程序。可是咱们实际上使用HTTP请求方法(例如GET和POST)来使用Spring Boot Actuator表示管理端点。后面咱们再来详细了解Actuator吧。

💡上面大概知道了核心模块都能干些啥,不过具体细节的,咱们在实际工程中再来体会,除了上述核心模块,另外有Spring Initilizr Web工具来快速配置生成一个Spring Boot项目。

4 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 框架在内部取决于这两个主要组件:GroovyGrape

具体地能够详细了解Grape JAR依赖项管理器

5 Spring Boot开发环境

好了,上面说了这么多,不容易,就是为了作个铺垫,让咱们知道Spring boot有哪些核心地东西,都是干啥用的,接下来就正式进入实践环节了,咱们从开发环境入手。

Spring boot官方提供的系统需求来看(Spring Boot 2.2.0):

  • 构建工具

    • Marven: 3.3+
    • Gradle:5.x(也支持4.10,但已弃用)
  • Servlet容器(能够将Spring Boot应用程序部署到任何Servlet 3.1+兼容的容器中)

    • Tomcat 9.0:Servlet4.0
    • Jetty 9.4: Servlet3.1
    • Undertow 2.0: Servlet4.0

5.1 安装相关软件

咱们选定相关软件版本:

💡目前为止已是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。
  • JDK 安装: 解压后就能够了,而后配置下环境变量(自行搞定);
  • Marven 安装: 解压后就能够了,而后须要在STS中指定该安装版本,后面会介绍;
  • STS 安装:解压后就能够了。
💡安装JDK的方式能够有多种,如在类Linux平台中能够经过安装管理工具直接从远程镜像源拉取安装;

5.2 配置STS

配置JDK:

安装好STS后,打开软件-->Window-->Preferences-->Java-->Installed JREs:

配置Marven:

Marven在安装好STS后,已经默认内部安装了,不过想要另外指定Marven版本也是能够的,打开STS-->Window-->Preferences-->Marven-->Installations-->Add添加:

6 总结

这一篇咱们开始从内部了解Spring boot,从它的几个核心模块讲起,知道了Spring boot是如何减小组件依赖和简化繁杂的配置的,以及讲述了Spring boot减小组件依赖和简化繁杂配置的内部原理,最后开始进入Spring boot实践,完成了Spring boot的开发环境搭建。至此,咱们开始慢慢走进Spring boot。加油!

7 参考资料

本文属于原创,转载注明出处,欢迎关注CSDNfreeape或微信小程序小白AI博客 微信公众号小白AI或者网站 https://xiaobaiai.net

相关文章
相关标签/搜索