初学 Spring Boot,你须要了解的 7 样东西

本文翻译自 7 Things to Know Getting Started With Spring Boot by Ranga Karanamweb

Spring Boot 是一个比较 tricky 的框架,因此也每每不容易理解。这篇教程将讲解 Spring Boot 的基本组成,包括 Starter 项目、自动配置和 Starter Parents 等,来帮助初学者能更好的理解和掌握 Spring Boot。spring

理解 Spring Boot 的架构

Spring Boot 包含了这些组成部分:数据库

  1. Spring Boot Starter 项目
  2. Spring Boot Starter Parent
  3. 自动配置

首先咱们会先把 Spring Boot 跟 Spring、Spring MVC 作一个比较,来帮助理解 Spring Boot 到底带来了什么。一旦明白了 Spring Boot 能提供什么功能,也就能更好的使用 Spring Boot。编程

Spring Boot vs Spring MVC vs Spring

它们之间的关系,最重要的一点是:bootstrap

Spring Boot 跟 Spring、Spring MVC 不是竞争关系,Spring Boot 是为了能更好的使用他们。api

Spring 框架

Spring 框架最重要的特性就是依赖注入(Dependency Injection),而全部 Spring 模块的核心就是依赖注入和控制反转(IOC - Inversion of Control)。spring-mvc

经过妥善的使用依赖注入和控制反转,咱们能够较为容易地开发出松散耦合的应用,而且易于测试。缓存

Spring MVC

Spring MVC 提供了诸如 Dispatcher Servlet、ModelAndView 和 View Resolver 等,让编写松散耦合的 Web 应用变得很容易。tomcat

Spring Boot

Spring、Spring MVC 的一个弊端就是配置很复杂:springboot

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/WEB-INF/views/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>
<mvc:resources mapping="/webjars/**" location="/webjars/"/>
复制代码

而 Spring Boot 经过自动配置Starter Project 解决了这个问题。同时它也提供了不少特性,让构建 production-ready 的应用变得容易和迅速。

关于 Spring Boot 和 Spring、Spring MVC 更深层次的对比,请阅读:Spring Boot vs. Spring MVC vs. Spring - How do they compare?

Spring Boot 自动配置

Spring 和 Spring MVC 有很是多的 XMl 和 Java Bean 配置。 而 Spring Boot 经过一个新思路为咱们解决了这个问题:

咱们能不能让配置变得更智能?当应用里面增长了 Spring MVC 的 JAR 包,咱们能不能自动地配置一些 Java Bean?

  • 若是 classpath 里面有 Hibernate 的 JAR 包,Data Source 就自动配置好了,怎么样?
  • 若是 classpath 里面有 Spring MAC 的 JAR 包,Dispatcher Servlet 就自动配置好了,怎么样?

Spring Boot 自动配置的规则:

Spring Boot 首先会检查这两部分:一是 classpath 里面存在的框架;二是应用已经存在的配置。结合这两部分,Spring Boot 就能够提供这些框架所需的基本配置,这就是 Spring Boot 的自动配置。

关于自动配置的深层讲解,请阅读:What is Spring Boot Auto Configuration?

Spring Boot Starter 项目

Spring Boot 文档里是这样描述 Starter 项目的:

Starter 项目是一系列方便的依赖描述,能够在咱们的项目中引用。经过 starter 项目,咱们能“一站式”得得到全部所需的 Spring 以及相关技术,而不用像之前同样去找各类事例代码,复制相关的依赖描述。例如:若是咱们想使用 Spring 和 JPA 来连接数据库,咱们只须要把 spring-boot-starter-data-jpa 引入到咱们的项目中,项目就搭建完了。

下面经过 Spring Boot Starter Web 来举个例子:

若是咱们想开发一个 Web 应用或者 RESTful 服务,咱们就能够直接使用 Spring Boot Starter Web。

当把 Spring Boot Starter Web 加到咱们的项目依赖中,咱们就能够看到相关的不少其余依赖也被加到应用里面了,如截图:

这里面包含了不少开发一个 Web 应用所需的经常使用模块。经过 Spring Boot Starter Web,咱们能够很容易的引入并使用它们:

  • Spring - core,beans,context,AOP
  • Web MVC - Spring MVC
  • Jackson - JSON 解析库
  • Validation - Hibernate Validator,Validation API
  • Embedded Servlet Container - Tomcat
  • Logging - logback,slf4j

几乎全部的 Web 应用都须要这些模块,Spring Boot Starter Web 已经打包好了这些依赖。而开发者就不须要去处理这些依赖,以及它们的版本兼容问题。

Spring Boot 提供了大量这类 starter 项目。而 Spring Initializr 也全都支持,其中就包括:

  • spring-boot-starter-web-services:构建 SOAP Web 服务应用
  • spring-boot-starter-web:构建 Web 应用和 RESTful 服务
  • spring-boot-starter-test:编写单元测试和集成测试
  • spring-boot-starter-jdbc:传统的 JDBC 应用
  • spring-boot-starter-hateoas:给应用增长 HATEOAS 特性让服务更 RESTful 化
  • spring-boot-starter-security:使用 Spring Security 来进行认证和受权
  • spring-boot-starter-data-jpa:Spring Data JPA 和 Hibernate
  • spring-boot-starter-cache:让 Spring 框架支持缓存
  • spring-boot-starter-data-rest:使用 Spring Data REST 来暴露一个简单的 REST 服务

想更深刻的了解 starter 项目,请阅读:Initializing Projects with Spring Boot Starters - Web and JPA

Spring Boot Starter Parent

几乎全部 Spring Boot 项目的 pom.xml 配置中,都使用了 spring-boot-starter-parent 来做为 parent 配置:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
</parent>
复制代码

parent POMs 让咱们更好的管理多个子项目或者模块:

  • 配置相关:Java 版本和其余属性
  • 依赖管理:依赖的版本
  • 默认插件的配置

想更深刻的了解 Spring Boot Starter Parent,请阅读:Introduction to Spring Boot Starter Parent

Spring Initializr:让建立 Spring Boot 项目像开 F1 赛车同样快

Spring Initializr 是一个很是好的初始化 Spring Boot 项目的工具。

它提供了一个很简单的 UI,经过它咱们能够建立各类不一样类型的 Spring 项目,如:

  • Web 应用
  • RESTful 服务
  • Batch 应用

咱们来体验一下怎么经过 Spring Initializr 来建立一个项目:

如上图所示,只需简单几步:

  • 打开 Spring Initializr (start.spring.io/)
    • Group 输入 com.in28minutes.springboot
    • Artifact 输入 student-services
    • dependency 选择 Web
  • 点击页面下方的 Generate Project 按钮
  • 把项目导入到 intelliJ 或者 Eclipse 便可。

想更深刻的了解 Spring Initializr,请阅读:Spring Initializr - Bootstrap Your Spring Boot Applications at F1 speed!

Spring Boot 和内嵌服务器

当咱们建立了一个可部署的包以后,咱们能够在部署包中嵌入一个服务器(如 Tomcat)。

例如,对于一个 Spring Boot 应用,咱们能够构建一个 JAR 包,里面包含了一个内嵌的 Tomcat 服务器(Embedded Tomcat),而后咱们就能够像执行一个普通的 Java 程序同样启动这个服务器。

一个内嵌的服务器意味着,在咱们的部署包里面包含了服务器的二进制文件(如 tomcat.jar)

咱们来看下 spring-boot-starter-web 的依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <version>2.0.0.M6</version>
    <scope>compile</scope>
</dependency>
复制代码

能够看到,默认状况下,Starter Web 已经包含了 Starter Tomcat 的依赖:

  • Tomcat 是 Spring Boot 的默认内嵌服务器
  • Spring Boot 也支持 Jetty 和 Undertow

想更深刻的了解内嵌服务器,请阅读:Spring Boot and Embedded Servers - Tomcat, Jetty, and Undertow

Spring Data

官方说明 projects.spring.io/spring-data…

Spring Data 提供了一个简单、统一,且基于 Spring 编程模型的数据接入层,同时还能保留了底层数据存储的一些特性。它让咱们使用数据接入技术、关系型数据库、非关系型数据库、map-reduce 框架以及基于云的服务变得简单。

简单来讲,Spring Data 提供了一个统一的抽象,咱们能够无论底层多样的数据源,而使用一个统一的接入层。

Spring Data 包括了以下子模块:

  • Spring Data JPA - 关系型数据库
  • Spring Data MongoDB
  • Spring Data REST - 封装 Spring Data 仓库,提供一个优秀的 REST api 服务

想更深刻的了解 Spring Data,请阅读:Introduction to Spring Data - Spring Data JPA, Spring Data REST, and MongoDB

其余引用

相关文章
相关标签/搜索