本文属于原创,转载注明出处,欢迎关注微信小程序小白AI博客
微信公众号小白AI
或者网站 https://xiaobaiai.nethtml
[TOC]java
在上一篇文章中咱们已经详解介绍了Spring boot
相关的概念、特性以及周边知识,这一篇文章咱们继续深刻。咱们知道Spring boot
是一个入口,利用Spring Boot
提供的核心组件能够很方便的、快速的
(Boot)建立或配置实际项目,接下来咱们来了解Spring boot
都包含了哪些核心模块(组件),以及Spring boot
是如何运转起来的,最后经过一个实际的Hello World
项目来讲明。git
名词术语 | 释义 |
---|---|
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
主要几个核心模块:github
💡 下面的操做看不懂或者理解很模糊,先别慌,后面会深刻讲解的。由于我如今本身也没完全搞懂,怕带歪大家,都是摘取官方文档中汇总而来的。
1) SpringApplication 类:web
该模块其中的SpringApplication
类可用于从Java main
方法引导和启动Spring应用程序。默认状况下,该class将执行如下步骤来引导应用程序:spring
ApplicationContext
实例(取决于你的类路径)CommandLinePropertySource
以将命令行参数公开为Spring的属性(properties)ApplicationContext
),加载全部单例beanCommandLineRunner
bean在大多数状况下,能够直接从主方法中调用静态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运行容器有着很好的支持。
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吧。
💡上面大概知道了核心模块都能干些啥,不过具体细节的,咱们在实际工程中再来体会,除了上述核心模块,另外有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):
构建工具
Servlet容器(能够将Spring Boot
应用程序部署到任何Servlet 3.1+
兼容的容器中)
咱们选定相关软件版本:
Spring Boot
。所以,在类路径中包含相应的spring-boot-*.jar
文件便可。💡目前为止已是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的方式能够有多种,如在类Linux平台中能够经过安装管理工具直接从远程镜像源拉取安装;
配置JDK:
安装好STS后,打开软件-->Window
-->Preferences
-->Java
-->Installed JREs
:
配置Marven:
Marven在安装好STS后,已经默认内部安装了,不过想要另外指定Marven版本也是能够的,打开STS-->Window
-->Preferences
-->Marven
-->Installations
-->Add
添加:
这一篇咱们开始从内部了解Spring boot
,从它的几个核心模块讲起,知道了Spring boot
是如何减小组件依赖和简化繁杂的配置的,以及讲述了Spring boot
减小组件依赖和简化繁杂配置的内部原理,最后开始进入Spring boot
实践,完成了Spring boot
的开发环境搭建。至此,咱们开始慢慢走进Spring boot
。加油!
本文属于原创,转载注明出处,欢迎关注CSDNfreeape或微信小程序小白AI博客
微信公众号小白AI
或者网站 https://xiaobaiai.net