Spring Boot 简明教程

Spring Boot - Introduction

Spring Boot 是一个用于创建微服务的开源 Java 框架。它由 Pivotal Team 开发,用于构建独立且可用于生产的 Spring 应用程序。本章将为您介绍 Spring Boot,并帮助您熟悉它的基本概念。

What is Micro Service?

微服务是一种允许开发人员独立开发和部署服务的架构。每个正在运行的服务都有自己的进程,并且实现了轻量级模型以支持业务应用程序。

Advantages

微服务为其开发人员提供了以下优势−

  1. Easy deployment

  2. Simple scalability

  3. Compatible with Containers

  4. Minimum configuration

  5. Lesser production time

What is Spring Boot?

Spring Boot 为 Java 开发人员提供了一个非常好的平台,用于开发您可以在 just run 的独立而且可用于生产的 Spring 应用程序。您可以在无需进行整个 Spring 配置设置的情况下开始使用最低配置。

Advantages

Spring Boot为其开发人员提供了以下优势−

  1. 易于理解和开发 Spring 应用程序

  2. Increases productivity

  3. Reduces the development time

Goals

Spring Boot 基于以下目标设计−

  1. 避免在 Spring 中进行复杂的 XML 配置

  2. 以一种更轻松的方式开发可用于生产的 Spring 应用程序

  3. 减少开发时间并独立运行应用程序

  4. 提供一种更轻松方式来开始使用应用程序

Why Spring Boot?

您可以根据这里提供的特性和优势选择 Spring Boot−

  1. 它提供了一种灵活的方式来配置 Java Bean、XML 配置和数据库事务。

  2. 它提供强大的批处理功能并管理 REST 终结点。

  3. 在 Spring Boot 中,所有内容都是自动配置的;无需手动配置。

  4. 它提供了基于注释的 Spring 应用程序

  5. Eases dependency management

  6. 它包含嵌入式 Servlet 容器

How does it work?

Spring Boot 根据您使用 @EnableAutoConfiguration 注释添加到项目的依赖项自动配置您的应用程序。例如,如果 MySQL 数据库在您的类路径中,但是您还未配置任何数据库连接,那么 Spring Boot 会自动配置一个内存数据库。

Spring 引导应用程序的入口点是包含 @SpringBootApplication 注解和主方法的类。

Spring 引导使用 @ComponentScan 注解自动扫描项目中包含的所有组件。

Spring Boot Starters

处理依赖管理对于大型项目而言是一项艰巨的任务。Spring Boot 通过为开发者提供一组依赖项来解决这个问题。

例如,如果您想使用 Spring 和 JPA 访问数据库,那么只需要在项目中包含 spring-boot-starter-data-jpa 依赖项就足够了。

请注意,所有 Spring 引导启动器都遵循相同的命名模式 spring-boot-starter- *,其中 * 表示它是应用程序的类型。

Examples

查看下面解释的以下 Spring 引导启动器以更好地理解 −

Spring Boot Starter Actuator dependency 用于监控和管理您的应用程序。其代码如下所示 −

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Spring Boot Starter Security dependency 用于 Spring Security。其代码如下所示 −

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-security</artifactId>
</dependency>

Spring Boot Starter web dependency 用于编写 REST 端点。其代码如下所示 −

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Spring Boot Starter Thyme Leaf dependency 用于创建 Web 应用程序。其代码如下所示 −

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

Spring Boot Starter Test dependency 用于编写测试用例。其代码如下所示 −

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
</dependency>

Auto Configuration

Spring Boot 自动配置会根据您在项目中添加的 JAR 依赖项自动配置您的 Spring 应用程序。例如,如果 MySQL 数据库在您的类路径中,但您尚未配置任何数据库连接,那么 Spring Boot 会自动配置内存数据库。

为此,您需要向您的主类文件添加 @EnableAutoConfiguration 注解或 @SpringBootApplication 注解。然后,您的 Spring 引导应用程序将被自动配置。

观察以下代码以更好地理解 −

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

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

Spring Boot Application

Spring 引导应用程序的入口点是包含 @SpringBootApplication 注解的类。此类应具有运行 Spring 引导应用程序的主方法。 @SpringBootApplication 注解包括自动配置、组件扫描和 Spring 引导配置。

如果您向类中添加 @SpringBootApplication 注解,则无需添加 @EnableAutoConfiguration, @ComponentScan@SpringBootConfiguration 注解。 @SpringBootApplication 注解包含所有其他注解。

观察以下代码以更好地理解 −

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

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

Component Scan

当应用程序初始化时,Spring 引导应用程序扫描所有 Bean 和包声明。您需要为此类文件添加 @ComponentScan 注解以扫描项目中添加的组件。

观察以下代码以更好地理解 −

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

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