乐趣区

Spring-Boot-简介与入门216版

Spring Boot 2.1.6 版

​ 与时俱进是每一个程序员都应该有的意识,当一个 Java 程序员在当代步遍布的时候,你就行该想到我能多学点

什么。可观的是后端的框架是稳定的,它们能够维持更久的时间在应用中,而不用担心技术的更新换代。但是类似

SSH,SSM 这些框架已经太久了,人们迫不及待地想使用更为优雅而又简便的框架来代替,所以 SpringBoot 运用而

生。

​ Spring Boot 是 Spring 家族中的一个全新的框架,它用来简化 Spring 应用程序的创建和开发过程。采用 Spring

Boot 可以非常容易和快速的构建基于 Spring 框架的应用程序,它让编码变简单,配置变简单,部署变简单,监控

变简单。正因为 Spring Boot 能够化繁为简,让开发变得极其快捷,所以在业界备受关注。目前 Spring Boot 在国内

的关注趋势也日渐超过 Spring。

学习条件

​ SpringBoot 框架是应用在 Spring Framework 框架的基础上,对 Spring Framework 框架的进行优化和升级成

为了新的框架。既 SpringBoot 是构建在 Spring Framework 框架的基础之上,所以想要学好 SpringBoot-那么你肯

定要掌握 Spring Framework。

介绍

Spring Boot 概述

​ Spring 框架功能很强大,但是就算是一个很简单的项目,我们也要配置很多东西。因此就有了 Spring Boot 框

架,它的作用很简单,就是帮我们自动配置。Spring Boot 框架的核心就是自动配置,只要存在相应的 jar 包,

Spring 就帮我们自动配置。如果默认配置不能满足需求,我们还可以替换掉自动配置类,使用我们自己的配置。

Spring Boot 不是对 Spring 的增强,而是一个快速使用 Spring 进行开发的框架。==Spring Boot 旨在帮助开发者快 ==

== 速搭建 Spring 框架 ==

​ 使用 Spring Boot 可以很容易创建一个独立运行 (运行 jar,内嵌 servlet 容器)、准生产级的基于 Spring 框架的项

目,使用 Spring Boot 我们可以不用甚至只需要很少的 Spring 配置。另外,Spring Boot 还集成了嵌入式的 Web 服务

器,系统监控等很多有用的功能,让我们快速构建企业级应用程序。

​ == 微服务是未来发展的趋势,Spring Boot 是项目微服务化发展的基石。==

​ 以上观点也是我们为什么要学习 SpringBoot 的关键点。

Spring Boot 核心功能

独立运行的 Spring 项目

​ Spring Boot 可以以 jar 包形式直接运行,如 java -jar xxx.jar

​ 优点是:节省服务器资源

内嵌 Tomcat 和 Jetty 容器

​ Spring Boot 可以选择内嵌 Tomcat,Jetty,这样我们无须以 war 包形式部署项目。

提供一个 starter POMs 来简化 Maven 配置

​ 例如引入 spring-boot-starter-web 时会自动引入

​ spring-boot-starter-parent 是一个特殊 Start,它用来提供相关的 Maven 依赖项,使用它之后,常用的包依

赖可以省去 version 标签。

自动配置 Spring

​ Spring Boot 会根据在类路径中的 jar 包,类,为 jar 包里的类自动配置 Bean,这样会极大减少我们要使用的配

置。当然 SpringBoot 只考虑了大部分开发场景,并不是所有的场景,如果在实际的开发中我们需要自动配置

Bean,而 Spring Boot 不能满足,则可以自定义自动配置。

准生产的应用监控

​ Spring Boot 提供基于 http,ssh,telnet 对运行时的项目进行监控。

无代码生成和 xml 配置

​ Spring Boot 大量使用 spring4.x 提供的注解新特性来实现无代码生成和 xml 配置。spring4.x 提倡使用 Java 配

置和注解配置组合,而 Spring Boot 不需要任何 xml 配置即可实现 spring 的所有配置。

​ 综上我们可以得出:Spring Boot 让开发变得简单,让部署变得简单,让监控变得简单,让配置变得更简单。

快速入门

​ Spring Boot 2.1.6.RELEASE 需要 Java 8,并且与 Java 11 兼容(包括在内)。

​ 还需要 Spring Framework 5.1.8.RELEASE 或更高版本。

第一个 Spring Boot 项目

创建项目

编写 pom.xml

​ 根据官网 Spring Boot 文档提示从 spring-boot-starter-parent 项目继承并向一个或多个 Starters

明依赖项。Spring starter 是 Spring Boot 的核心,可以理解为一个可拔插式的插件,例如,你想使用 Reids 插

件,那么可以使用 spring-boot-starter-redis;如果想使用 MongoDB,可以使用 spring-boot-starter-data-

mongodb。

<!-- 引入 springboot 父类依赖 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.6.RELEASE</version>
</parent>

<dependencies>
    <!-- springboot-web 组件 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

HelloWorld

​ HelloWorldController.java

package com.springboot.controller;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

// 表示该服务接口全部返回 json 格式 默认每个方法都加了 @ResponseBody
@RestController
// 表示所扫描到的服务
@EnableAutoConfiguration
public class HelloWorldController {@RequestMapping("/hello")
    public String hello() {return "hello";}

    @RequestMapping("/getMap")
    public Map<String, Object> getMap() {Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("code", "200");
        resultMap.put("msg", "成功");
        return resultMap;
    }

    // 主函数运行 springboot 项目
    public static void main(String[] args) {SpringApplication.run(HelloWorldController.class, args);
    }

}

​ 结果

......

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
(()\___ | '_ |'_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::       (v1.5.10.RELEASE)

......

...Registering beans for JMX exposure on startup
...Tomcat started on port(s): 8080 (http)
...Started HelloWorldController in 5.806 seconds (JVM running for 10.606)

Spring Boot 第二种启动方式

​ 项目中肯定不止一个 Controller,我们当然希望项目启动时将所有的 Controller 全部加载进来,这种情况又

该如何配置呢?比如此时有两个 Controller,都需要被执行。

​ HelloWorldController.java

package com.springboot.controller;

import org.springframework.boot.SpringApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
public class HelloWorldController {@RequestMapping("/hello")
    public String hello() {return "hello";}

    @RequestMapping("/getMap")
    public Map<String, Object> getMap() {Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("code", "200");
        resultMap.put("msg", "成功");
        return resultMap;
    }

}

​ IndexController.java

package com.springboot.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class IndexController {@RequestMapping("/index")
    public String index() {return "index";}

}

​ App.java

package com.springboot.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;

// 扫描指定包下的服务
@ComponentScan("com.springboot.controller")
// 表示所扫描到的服务
@EnableAutoConfiguration
public class App {

    // 项目中不需要有多个 main 方法只需要有一个入口就可以了
    public static void main(String[] args) {
        // 主函数运行 springboot 项目
        SpringApplication.run(App.class, args);
    }

}

​ 删除其他服务的主函数 main(),只保留一个即可。

​ 并且删除其他服务的 @EnableAutoConfiguration 注解,只在主函数服务中添加。

​ 通过 @ComponentScan 注解扫描你需要的服务。

​ 启动 App.java,其他两个服务也可以访问到了。

Spring Boot 第三种启动方式

​ 开发中,我们经常使用以下 3 个注解注解 main 类。

​ 分别是 @Configuration@EnableAutoConfiguration@ComponentScan。由于这些注解一般都是一

起使用,Spring Boot 便提供了一个统一的注解 @SpringBootApplication

​ 需要注意的是:@SpringBootApplication 只能扫描同级包下。

​ 不同包下的可以使用 @SpringBootApplication 结合 @EnableAutoConfiguration

@ComponentScan 扫描注入。

​ 其中 @ComponentScan 很有用,可以通过该注解指定扫描某些包下包含如下注解的 Beans:

@Component@Service@Repository@Controller@Entity 等等均自动注册为 Spring Beans。

​ App.java

package com.springboot.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

// 相当于 @ComponentScan("com.springboot.app") 只扫描同级包下
// 解决办法提升当前 App 类的包范围 ("com.springboot"),或者结合 @ComponentScan 使用
@SpringBootApplication
// 扫描指定包下的服务
@ComponentScan("com.springboot.controller")
public class App {

    // 项目中不需要有多个 main 方法只需要有一个入口就可以了
    public static void main(String[] args) {
        // 主函数运行 springboot 项目
        SpringApplication.run(App.class, args);
    }

}
退出移动版