Spring Boot学习(一)——Spring Boot介绍

Spring Boot介绍

Spring Boot简介

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

SpringBoot基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。

从上面两段介绍,对Spring Boot应该有一个初步的认识了:

  1. 源自于Spring4.0框架
  2. 简化了Spring应用开发
  3. 集成了大量的框架

这就是我们对Spring Boot的初步认识,我们在通过与Spring框架的对比,来弄清楚Spring框架已经很优秀了,为什么还需要Spring Boot?

Spring Boot与Spring

Spring

我们学习完JavaSE之后我们就步入了学习JavaEE的过程,我们首先学的就是JavaWeb(Tomcat和Servlet),后面就开始学习Spring,我相信在学习Spring的时候,大家看的第一张图应该就是那张将Spring所有主要模块罗列的图了。而Spring框架其实包含了很多的功能模块,并且我们可以根据项目需求使用其中某些模块。

拿Spring MVC框架举例,在我们使用Spring MVC框架进行开发时我们会发现比导入jar包更多的是构建Spring MVC项目时我们需要配置的文件——application.xml,springmvc-config.xml,log4j.properties,db.properties...,这一大堆的配置文件还是项目不是很大的情况下,如果项目够大,为了规范代码,配置文件肯定更多更繁杂,最关键的是,其中大部分代码在多个web项目中配置内容大多相同,不同的只是参数,即使是是用了Spring提供的Java注解,配置文件写起来也还是麻烦,这个时候要是可以帮我们自动写配置文件就好了,我们只需要表明关键的配置参数,一个web项目就生成了,这样岂不是不用浪费时间在写配置文件和书写依赖关系上了?所以Spring Boot出现了

Spring Boot

Spring Boot基本上是Spring框架的扩展,它消除了设置Spring应用程序所需的XML配置,为更快,更高效的开发生态系统铺平了道路。有点类似于maven,maven集成了全部jar,而Spring Boot集成了绝大部分框架。

当然不是说Spring Boot不需要配置,Spring Boot需要的配置文件类似于Maven的POM,maven就POM一个配置文件,而Spring Boot也就一个配置文件足以,并且配置规则不难,大部分配置已经默认好了。关键是Spring Boot还帮助我们进行了依赖之间的管理和依赖的版本控制。降低了依赖之间的冲突。

以下是Spring Boot中的一些特点:

  1. 创建独立的spring应用(Spring不再是配角)。
  2. 嵌入Tomcat, Jetty Undertow 而且不需要部署他们。
  3. 提供的“starters” poms来简化Maven配置(一站式管理依赖)
  4. 尽可能自动配置spring应用。
  5. 提供生产指标,健壮检查和外部化配置
  6. 绝对没有代码生成和XML配置要求

区别

相信介绍之后两者区别很明显了:

  • 项目搭建和开发过程Spring Boot要优于大部分Spring应用开发,并且简化了Spring应用。并不需要配置大量的配置文件,也不需要繁杂的开发步骤,Spring Boot继承了Spring的优点并在其扩展了自己的特点(就是包含大量框架)。
  • 解决了项目中依赖之间的不稳定性,依赖冲突的问题。Spring Boot帮我们一站式管理了依赖,而Spring要在maven中显示声明大部分依赖。
  • Spring Boot内部嵌入了服务端,而且不需要部署,Spring 需要我们手动配置和部署(即使用了idea)

当然两者区别肯定是不只上诉三点的,这只是两者最直观,初学最开始感受到的区别。

Spring Boot的初步使用

使用Spring Boot搭建一个简单的Spring MVC 项目:

我们先用maven创建一个普通的java项目,项目结构如图:

20210916092647

至于为什么这个普通的Java项目是web项目,学到后面就详细了解了,我们先用Spring Boot跑起来。

下一步就是使用maven导入Spring Boot的依赖,这里我们这里就采用继承的方式。
pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>01_test_springBoot_web</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 配置要继承父项目,继承Spring Boot中的资源 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.10.RELEASE</version>
    </parent>

    <!-- 使用dependencyManagement 来管理
     通过上面方式,就可以获取spring-boot-dependencies 2.1.10.RELEASE.pom文件中dependencyManagement配置的jar包依赖
     相当于拿到了spring-boot-dependencies 中的pom文件中dependencyManagement中声明的依赖
     -->
<!--    <dependencyManagement>-->
<!--        <dependencies>-->
<!--            <dependency>-->
<!--                <groupId>org.springframework.boot</groupId>-->
<!--                <artifactId>spring-boot-dependencies</artifactId>-->
<!--                <version>2.1.10.RELEASE</version>-->
<!--                <type>pom</type>-->
<!--                <scope>import</scope>-->
<!--            </dependency>-->
<!--        </dependencies>
    </dependencyManagement>-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

看我们项目的maven的依赖

20210916143157
展示的有7个主体依赖(并不是所有依赖),其中有Spring boot、json、tomcat、Spring web、Spring webmvc、validator(参数校验)。

我们的maven中只显示依赖了spring-boot-starter-web,这个玩意称为Spring web的启动器,Spring Boot中集成了Spring web框架,所以Spring Boot会自动将Spring Web框架以及所需的依赖都帮我们导入,这就体现了Spring Boot对依赖的统一管理特点。

接下来我们开始编写逻辑代码,在com.lyl.controller下新建MyController.java:

package com.lyl.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MyController {
    @ResponseBody
    @RequestMapping("show")
    public String show(){
        return "Hello Spring Boot!";
    }
}

controller层写好了,接下来是不是应该将项目部署到我们本地Tomcat中呢?按理来说我们是部署不了的,因为这个时候项目中并没有webapp文件夹,也没有WEB-INF,那我们如何运行呢?

前面说我们导入的依赖中有Tomcat的依赖,也就是说Spring Boot本身就为我们这个项目内嵌了Tomcat,我们可以直接在Spring Boot上运行我们的web项目。

但是我们不知道从哪里开始运行,Spring Boot为我们提供了应用入口,其实就是一个普通的Java类,但是Spring Boot官方建议我们将入口类放在根目录下。
20210916164533
MyApplication.java:

package com.lyl;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

// 可以自动扫描当前类的包及其子包下的所有注解
/*
    @SpringBootApplication代表的是组合注解:

    @Configuration
    @EnableAutoConfiguration
    @ComponentScan
    
*/
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class,args);
    }
}

运行main得出结果:
20210916164949
从中我们可以看到Tomcat开放的端口号,以及web项目的根url
浏览器输入:localhost:8080/show

20210916165124

成功接收到服务器返回的信息!代表我们使用Spring Boot搭建web项目已经成功,我们使用maven将我们项目打包,在target中发现war包没有了,取而代之的竟然是jar包!为什么会这样?jar包可以被java的编译器识别,而war包是给tomcat的,也就是说,Spring Boot帮我们内置了tomcat(需要依赖),所以我们就省去了部署项目这一步骤,tomcat的相关配置也只要在Spring Boot配置文件中配置就好。

到此我们对Spring Boot应该有了一个初步的了解。

Spring Boot的理解

Spring Boot不是Spring的替代品,Spring Boot依赖Spring框架来管理对象的依赖。Spring Boot也不是精简版的Spring,Spring Boot为Spring做好了面向各种企业级产品的准备。

我们如果Spring基础不扎实,学习Spring Boot时遇到一些知识点可能理解困难,效率不高。所以我们首先应该学好Spring框架的基础。核心依旧是Spring。

在我们以往使用Spring框架,一般是使用Spring中的模块,web容器启动时再去进行Spring容器的注册和初始化,而Spring Boot是以Spring启动后去加载web容器,所以叫创建独立的Spring应用。

posted @ 2021-09-16 17:33  CN_DADA  阅读(333)  评论(0编辑  收藏  举报