Spring Boot是什么?

背景

最近因公司需要,开始研究java相关的开发,之前一直从事.net相关开发,所以写的或者理解的不对的地方呢,希望大家批评指正。

首先开发框架吧,就像.net很早之前有asp.net webForm,asp.net MVC,.net core等,Java也有这样的框架,比如Spring Framework、Spring Data、Spring Batch、Spring Security、Spring MVC等等。记得好多年前吧,也接触过java spring开发,当时的感觉就是配置文档太多了,经常因为配置文件错了导致程序起不来,而.net程序就封装得很好,很多东西微软都帮我们做好了,比如asp.net MVC,当我在建立这个项目的时候,IDE已经根据向导帮我们把结构都搭好了,不需要更多的配置,程序员只需要关注业务代码,所以当时也是放弃了JAVA的深入学习。

那么几年后的今天,重新来学java也是感触良多,Java的社区生态活跃度确实比.net好太多,开源项目都是java过来的居多,很多.net的框架也是从java演变和借鉴过来的,好的,废话不说了,我的入门第一课呢,就从Spring Boot开始,有点人觉得Spring都不会,一上来就学Spring Boot是不是不太好。我觉得没啥关系哈,毕竟Spring Boot是个引导,让开发Spring程序更简单化了,接下来我们就探讨下Spring Boot到底是个什么东西?

Spring

为了更好的理解Spring Boot,首先大致了解下Spring哈,如果要用Spring来开发一个Hello World Web应用程序,该做些什么?

  • 一个项目结构,包含必要的Maven或者Gradle构建文件,最起码要有Spring MVC和Servlet API这些依赖。
  • 一个web.xml文件。
  • 一个启用了Spring MVC的Spring配置。
  • 一个控制器类,以“Hello World”响应http请求。
  • 一个用于部署应用程序的Web应用服务器,比如:tomcat

而这些繁琐的工作为什么要开发者自己来提供呢,如果我在创建这个项目的时候就自动生成那该多好啊!那这时候Spring Boot就出现了。

Spring Boot

Spring Boot将很多魔法带入了Spring应用程序的开发之中,其中最重要的是以下四个核心。

  • 自动配置
  • 起步依赖
  • 命令行界面
  • Actuator
  1. 自动配置
    Spring Boot会为常见的配置场景进行自动配置。比如Thymeleaf模板、安全和Spring MVC。
  2. 起步依赖
    我们在项目中会应用到各种各样的库,如何来管理这些依赖项呢?Group和Artifact是什么?你需要哪个版本?会不会有冲突?这些都是要考虑的。
    Spring Boot起步依赖其实就是特殊的Maven依赖和Gradle依赖,利用了传递依赖解析,把常用的库聚合在一起,组成了几个为特定功能而定制的依赖。
  3. 命令行界面
    快速开发Spring应用程序的方法,Spring Boot CLI,不是非必要组成部分。
  4. Actuator
    其他几个都是简化Spring开发,而Actuatro则要提供在运行时检视应用程序内部情况的能力。安装了Actuator就可以窥探应用程序的内部情况了。

项目结构解析

新建项目

我用IntelliJ idea社区版做了一个Demo,通过这个Demo来解析。
首先新建一个项目,选择Spring Assistant,如下图所示,因社区版默认是没有Spring Assistant,也没有Spring initializr,所以必须先安装一个插件。
Spring Boot是什么?_第1张图片
填些一些基本信息,比如项目名称、Manven Grouphe Artifact Id、JAVA版本等,以及你想用Maven还是Gradle来构建项目。我这里是用Maven来构建项目。
Spring Boot是什么?_第2张图片
接下来是问你要往项目里添加什么依赖?比如我选择了Spring Web,还有Thymeleaf模板引擎,只要勾上就好。
Spring Boot是什么?_第3张图片

下一步,最后点击Finish项目就创建好了,我们可以看一下建好的项目结构。
Spring Boot是什么?_第4张图片

自动配置

DemoApplication.java不仅是启动引导类,还是配置类。

@SpringBootApplication
public class DemoApplication {

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

@SpringBootApplication开启组件扫描和自动配置功能。实际上,@SpringBootApplication将三个有用的注解组合在了一起。

  • Spring的@Configuration:标明该类使用Spring基于java的配置。
  • Spring的@ComponentScan:启用组件扫描,这样你写的Web控制类和其他组件才能被自动发现并注册为Spring应用程序上下文里的Bean。
  • Spring Boot的@EnabeAutoConfiguration:这个不起眼的小注解也可以称为@Abracadabra,就是这一行配置开启了Spring Boot自动配置的魔力。

mani()方法让你可以在命令行里把该应用程序当作一个可执行的JAR文件来运行。这里SpringApplication.run()传递了一个DemoApplication类的引用,还有命令行参数,通过这些启动应用程序。

起步依赖

因为我们选的Maven构建的项目,所以会生成乙个pop.xml文件。
pop.xml及起步依赖:



	4.0.0
    
	
		org.springframework.boot
		spring-boot-starter-parent
		2.2.6.RELEASE
		 
	
	com.example
	demo
	0.0.1-SNAPSHOT
	demo
	Demo project for Spring Boot
      
	
		1.8
	
      
	
		
			org.springframework.boot
			spring-boot-starter-thymeleaf
		
		
			org.springframework.boot
			spring-boot-starter-web
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
			
				
					org.junit.vintage
					junit-vintage-engine
				
			
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	

说起依赖,都只有五个依赖,除了手工添加的,其他的Artifact ID都有spring-boot-starter-前缀。这些都是Spring Boot起步依赖,它们都有助于Spring Boot应用程序的构建。
请注意pop.xml里的依赖都没有指定版本,那是因为spring-boot-starter-parent作为上一级,这样一来就能利用Maven的依赖管理功能,继承很多常用库的依赖版本,在你声明的时候就不需要指定版本了。

Spring Boot是什么?_第5张图片

你可能感兴趣的:(Spring Boot是什么?)