第一章 Spring起步

1.1 什么是Spring

Spring的核心是提供了一個容器(container),通常稱為Spring應(yīng)用上下文(Spring application context),它們會創(chuàng)建和管理應(yīng)用組件。這些組件也可以稱為bean,會在Spring應(yīng)用上下文中裝配在一起,從而形成一個完整的應(yīng)用程序。這就像磚塊、砂漿、木材、管道和電線組合在一起,形成一棟房子似的。

基于Java的配置類

@Configuration注解會告知Spring這是一個配置類,會為Spring應(yīng)用上下文提供bean。這個配置類的方法使用@Bean注解進行了標(biāo)注,表明這些方法所返回的對象會以bean的形式添加到Spring的應(yīng)用上下文中(默認(rèn)情況下,這些bean所對應(yīng)的bean ID與定義它們的方法名稱是相同的)。

1.2 初始化Spring應(yīng)用

項目結(jié)構(gòu)

典型的Maven或Gradle項目結(jié)構(gòu)

  • mvnw和mvnw.cmd:這是Maven包裝器(wrapper)腳本。借助這些腳本,即便你的機器上沒有安裝Maven,也可以構(gòu)建項目。
  • pom.xml:這是Maven構(gòu)建規(guī)范,隨后我們將會深入介紹該文件。
  • TacoCloudApplication.java:這是Spring Boot主類,它會啟動該項目。隨后,我們會詳細介紹這個類。
  • application.properties:這個文件起初是空的,但是它為我們提供了指定配置屬性的地方。在本章中,我們會稍微修改一下這個文件,但是我會將配置屬性的詳細闡述放到第5章。
  • static:在這個文件夾下,你可以存放任意為瀏覽器提供服務(wù)的靜態(tài)內(nèi)容(圖片、樣式表、JavaScript等),該文件夾初始為空。
  • templates:這個文件夾中存放用來渲染內(nèi)容到瀏覽器的模板文件。這個文件夾初始是空的,不過我們很快就會往里面添加Thymeleaf模板。
  • TacoCloudApplicationTests.java:這是一個簡單的測試類,它能確保Spring應(yīng)用上下文可以成功加載。在開發(fā)應(yīng)用的過程中,我們會將更多的測試添加進來。
package com.example.demo;

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

@SpringBootApplication               //SpringBoot應(yīng)用
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);             //運行應(yīng)用
    }
}

這個main()方法會調(diào)用SpringApplication中靜態(tài)的run()方法,后者會真正執(zhí)行應(yīng)用的引導(dǎo)過程,也就是創(chuàng)建Spring的應(yīng)用上下文。在傳遞給run()的兩個參數(shù)中,一個是配置類,另一個是命令行參數(shù)。盡管傳遞給run()的配置類不一定要和引導(dǎo)類相同,但這是最便利和最典型的做法。

盡管在TacoCloudApplication中只有很少的代碼,但是它包含了很多的內(nèi)容。其中,最強大的一行代碼也是最短的。@SpringBootApplication注解明確表明這是一個Spring Boot應(yīng)用。但是,@SpringBootApplication遠比看上去更強大。

@SpringBootApplication是一個組合注解,它組合了3個其他的注解。

  • @SpringBootConfiguration:將該類聲明為配置類。盡管這個類目前還沒有太多的配置,但是后續(xù)我們可以按需添加基于Java的Spring框架配置。這個注解實際上是@Configuration注解的特殊形式。
  • @EnableAutoConfiguration:啟用Spring Boot的自動配置。我們隨后會介紹自動配置的更多功能。就現(xiàn)在來說,我們只需要知道這個注解會告訴Spring Boot自動配置它認(rèn)為我們會用到的組件。
  • @ComponentScan:啟用組件掃描。這樣我們能夠通過像@Component、@Controller、@Service這樣的注解聲明其他類,Spring會自動發(fā)現(xiàn)它們并將它們注冊為Spring應(yīng)用上下文中的組件。

1.3 編寫Spring應(yīng)用

在剛開始的時候,比較合適的做法是為Taco Cloud應(yīng)用添加一個主頁。在添加主頁時,我們將會創(chuàng)建兩個代碼構(gòu)件:

  1. 一個控制器類,用來處理主頁相關(guān)的請求;
  2. 一個視圖模板,用來定義主頁看起來是什么樣子。

測試是非常重要的,所以我們還會編寫一個簡單的測試類來測試主頁。但是,要事優(yōu)先,我們需要先編寫控制器。

1.3.1 處理Web請求

Spring自帶了一個強大的Web框架,名為Spring MVC。Spring MVC的核心是控制器(controller)的理念。控制器是處理請求并以某種方式進行信息響應(yīng)的類。在面向瀏覽器的應(yīng)用中,控制器會填充可選的數(shù)據(jù)模型并將請求傳遞給一個視圖,以便于生成返回給瀏覽器的HTML。

在第2章中,我們將會學(xué)習(xí)更多關(guān)于Spring MVC的知識?,F(xiàn)在,我們會編寫一個簡單的控制器類以處理對根路徑(比如,“/”)的請求,并將這些請求轉(zhuǎn)發(fā)至主頁視圖,在這個過程中不會填充任何的模型數(shù)據(jù)。程序清單1.4展示了這個簡單的控制器類。

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller     //控制器
public class HomeController {
    @GetMapping("/")    //處理對根路徑“/”的請求
    public String home() {
        return "home";  //返回視圖名
    }
}

可以看到,這個類帶有@Controller。就其本身而言,@Controller并沒有做太多的事情。它的主要目的是讓組件掃描將這個類識別為一個組件。因為HomeController帶有@Controller,所以Spring的組件掃描功能會自動發(fā)現(xiàn)它,并創(chuàng)建一個HomeController實例作為Spring應(yīng)用上下文中的bean。

1.3.2 定義視圖

為了讓主頁盡可能簡單,除了歡迎用戶訪問站點之外,它不會做其他的任何事情。Taco Cloud主頁模板:
頁面路徑:templates/home.html
圖片路徑:static/images/TacoCloud.png

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Taco Cloud</title>
</head>
<body>
    <h1>Welcome to...</h1>
    <img th:src="@{/images/TacoCloud.png}"/>
</body>
</html>
1.3.4 構(gòu)建和運行應(yīng)用

頁面效果:

頁面效果

1.3.5 了解Spring Boot DevTools

顧名思義,DevTools為Spring開發(fā)人員提供了一些便利的開發(fā)期工具,其中包括:

  • 代碼變更后應(yīng)用會自動重啟;
  • 當(dāng)面向瀏覽器的資源(如模板、JavaScript、樣式表)等發(fā)生變化時,會自動刷新瀏覽器;
  • 自動禁用模板緩存;
  • 如果使用H2數(shù)據(jù)庫的話,內(nèi)置了H2控制臺。

作用:

  • 應(yīng)用自動重啟
  • 瀏覽器自動刷新和禁用模板緩存(解釋:但是,在開發(fā)期,緩存模板就不太好了。在應(yīng)用運行的時候,如果緩存模板,那么我們刷新瀏覽器就無法看到模板變更的效果了。即便我們對模板做了修改,在應(yīng)用重啟之前,緩存的模板依然會有效。)
  • 內(nèi)置的H2控制臺
1.3.6 回顧一下

1.4 俯瞰Spring風(fēng)景線

要想了解Spring的整體狀況,只需查看完整版本的Spring Initializr Web表單上的那一堆復(fù)選框列表即可。它列出了100多個可選的依賴項,所以我不會在這里列出所有選項,也不會提供截圖,但我鼓勵你去看一看。同時,在這里我會簡單介紹一些重點的項目。

  • 1.4.1 Spring核心框架
  • 1.4.2 Spring Boot
  • 1.4.3 Spring Data
    盡管Spring核心框架提供了基本的數(shù)據(jù)持久化支持,但是Spring Data提供了非常令人驚嘆的功能:將應(yīng)用程序的數(shù)據(jù)repository定義為簡單的Java接口,在定義驅(qū)動存儲和檢索數(shù)據(jù)的方法時使用一種命名約定即可。此外,Spring Data能夠處理多種不同類型的數(shù)據(jù)庫,包括關(guān)系型數(shù)據(jù)庫(JPA)、文檔數(shù)據(jù)庫(Mongo)、圖數(shù)據(jù)庫(Neo4j)等。在第3章中,我們將使用Spring Data為Taco Cloud應(yīng)用程序創(chuàng)建repository。
  • 1.4.4 Spring Security
    應(yīng)用程序的安全性一直是一個重要的話題,而且正在變得越來越重要。幸運的是,Spring有一個健壯的安全框架,名為Spring Security。Spring Security解決了應(yīng)用程序通用的安全性需求,包括身份驗證、授權(quán)和API安全性。SpringSecurity的范圍太大,在本書中無法得到充分的介紹,但是我們將在第4章和第11章中討論一些常見的使用場景.
  • 1.4.5 Spring Integration和Spring Batch
  • 1.4.6 Spring Cloud
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容