01- SpringBoot 入門

SpringBoot

SpringBoot 入門

概念

Spring Boot 是由 Pivotal 團隊提供用來簡化 Spring 的搭建和開發過程的全新框架。隨着近些年來微服務技術的流行,Spring Boot 也成了時下炙手可熱的熱點技術。
Spring Boot 去除了大量的 xml 配置文件,簡化了複雜的依賴管理,配合各種 starter 使用,基本上可以做到自動化配置。Spring 可以做的事情,現在用 Spring boot 都可以做。

回顧Spring IOC

Spring 的 IoC 容器中發生的事情其實也很簡單,總結下來即兩個階段:
採摘和收集“咖啡豆”(bean)
研磨和烹飪咖啡

Spring IoC 容器的依賴注入工作可以分爲兩個階段:
1)收集和註冊
第一個階段可以認爲是構建和收集 bean 定義的階段,在這個階段中,我們可以通過 XML 或者 Java 代碼的方式定義一些 bean,然後通過手動組裝或者讓容器基於某些機制自動掃描的形式,將這些 bean 定義收集到 IoC 容器中。

假設我們以 XML 配置的形式來收集並註冊單一 bean,一般形式如下:
<bean id="mockService" class="..MockServiceImpl"> ...</bean>

如果嫌逐個收集 bean 定義麻煩,想批量地收集並註冊到 IoC 容器中,我們也可以通過 XML Schema 形式的配置進行批量掃描並採集和註冊:
<context:component-scan base-package="cn.bdqn">

注意基於 JavaConfig 形式的收集和註冊,不管是單一還是批量,後面我們都會單獨提及。
2)分析和組裝
當第一階段工作完成後,我們可以先暫且認爲 IoC 容器中充斥着一個個獨立的 bean,它們之間沒有任何關係。

但實際上,它們之間是有依賴關係的,所以,IoC 容器在第二階段要乾的事情就是分析這些已經在 IoC 容器之中的 bean,然後根據它們之間的依賴關係先後組裝它們。

如果 IoC 容器發現某個 bean 依賴另一個 bean,它就會將這另一個 bean 注入給依賴它的那個 bean,直到所有 bean 的依賴都注入完成,所有 bean 都“整裝待發”,整個 IoC 容器的工作即算完成。

至於分析和組裝的依據,Spring 框架最早是通過 XML 配置文件的形式來描述 bean 與 bean 之間的關係的,隨着 Java 業界研發技術和理念的轉變,基於 Java 代碼和 Annotation 元信息的描述方式也日漸興盛(比如 @Autowired 和 @Inject),但不管使用哪種方式,都只是爲了簡化綁定邏輯描述的各種“表象”,最終都是爲本階段的最終目的服務。

很多 Java 開發者一定認爲 Spring 的 XML 配置文件是一種配置(Configuration),但本質上,這些配置文件更應該是一種代碼形式,XML 在這裏其實可以看作一種 DSL,它用來表述的是 bean 與 bean 之間的依賴綁定關係,如果沒有 IoC 容器就要自己寫代碼新建(new)對象並配置(set)依賴。

創建 SpringBoot 項目

三種方式可以創建SpringBoot 項目

  • 新建Maven 工程 手動創建
  • 使用SpringBoot 官網上的快速入口創建
  • 使用 IDEA SpringBoot 模板創建

(一) 使用maven 手動搭建環境

創建maven 項目

只需要創建普通的maven 項目就好

導入Springboot 項目依賴

父級依賴

 <parent>
    <groupId>org.springframework.boot</groupId>
    <!-- 這個特殊的依賴包含了應用運行需要的所有信息,它包含了Spring Boot應用所必須的類似於Spring FrameWork(spring-core)、
    Spring Test(spring-test)等基礎依賴的依賴描述。你只需要使用這個parent pom就能完成所有的依賴描述添加工作。-->
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
    <relativePath/>
  </parent>

本身依賴

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

搭建 目錄結構

java
resources
	|- resources
	|- public
	|- static
	|- templates
	|- application.properties 或者  application.yml 格式

書寫測試代碼

web層Controller

package com.example.springboot_demo;

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

@RestController
public class Demo {

    @RequestMapping("hello")
    public String hello(){
        return "Hello SpringBoot";
    }
}

程序入口

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

核心註解

@SpringBootApplication
// 一個複合註解, 含有諸多配置功能

(二) 快速創建springboot項目

官網 方式

IDEA 方式

SpringBoot 目錄結構

java
resources
		|- resources
		|- public
		|- static
		|- templates
		|- application.properties 或者  application.yml 格式

static 目錄

用於存放靜態資源,如圖片、CSS、JavaScript等

templates目錄

用於存放Web頁面的模板文件

application.properties/application.yml

用於存放程序的各種依賴模塊的配置信息,比如 服務端口,數據庫連接配置等。。。\

需要注意的是

  • 默認情況下,Spring Boot 的靜態文件加載順序是
    META/resources > resources > static > public 裏面找是否存在相應的資源,
    如果有則直接返回。
  • 使用@Controller與@ResponseBody 返回值的方式, 返回一個html文件,則需要將html文件放到templates文件夾下。

SpringBoot 核心配置文件

約定大於配置的方式 取代 SpringBoot大部分默認配置

使用Properties的方式

# 修改默認端口號
server.port=80

使用yml的方式

基本語法

k:(空格)v--->表示一對鍵值對。
(以空格縮進來控制層級關係;只要是左對齊的一列數據,都是同一層級)
屬性和值也是大小寫敏感。

舉例

server:
  port: 8080
  servlet:
    context-path: /

SpringBoot 熱部署

兩種方式完成

使用devtools

添加依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

添加配置文件

application.properties 方式配置文件

# 禁用緩存
spring.thymeleaf.cache=false
#熱部署生效
spring.devtools.restart.enabled: true
#設置重啓的目錄
#spring.devtools.restart.additional-paths: src/main/java
#classpath目錄下的WEB-INF文件夾內容修改不重啓
spring.devtools.restart.exclude: WEB-INF/**

需要設置IDEA的自動編譯:

1- File-Settings-Compiler-Build Project automatically

2- ctrl + shift + alt + /,選擇Registry,勾上 Compiler autoMake allow when app running
( 也可以ctrl+shift+A——雙擊Registry  )

SpringBoot 常用註解

核心註解

@SpringBootApplication 只會掃描 平級目錄或者子目錄, 不能向上掃描

這裏只有一個註解@SpringBootApplication,但是作用卻大得驚人,control鍵然後點擊該註解看源碼可知它替代了@@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan這三個註解的功能。接下來解釋這個三個註解的作用,理解了這三個註解,自然理解了@SpringBootApplication。

分解分析

1- @SpringBootConfiguration:該註解繼承自@Configuration,一般與@Bean配合使用,使用這兩個註解就可以創建一個簡單的spring配置類,可以用來替代相應的xml配置文件。

2- @EnableAutoConfiguration:該註解的意思就是Springboot可以根據你添加的jar包來配置你項目的默認配置,比如當你添加了mvc的jar包,它就會自動配置web項目所需的配置

3- @ComponentScan:顧名思義該註解是用來掃描組件的,只要組件上有@component及其子註解@Service、@Repository、@Controller等,springboot會自動掃描到並納入Spring 容器進行管理,有點類似xml文件中的<context:component-scan>,該註解不填屬性的話就是默認掃描啓動類所在的包,或者啓動類所在包的下一級,所以啓動類要放在最外層.

常用註解回顧

controller層:

	1、@Controller
		@Controller 用來響應頁面,表示當前的類爲控制器。
	2.1、@ResponseBody
		把數據轉換爲Json 格式 返回
	2.2、@RestController
		@RestController 是@ResponseBody和@Controller的結合
		表明當前類是控制器且返回的是一組數據,不是頁面

	3.1、@Autowired
		這個註解的作用是將其他的類,接口引入,類似於之前的類的初始化等,用這個註解,類中或接口的方法就可以直接調用了。
		
	3.2、@Resource
		默認按照名稱方式進行bean匹配,@Autowired默認按照類型方式進行bean匹配
		雖然不是 spring的註解(@Resource(importjavax.annotation.Resource;)是J2EE的註解,)
		
	4、@RequestMapping
		當前臺界面調用Controller處理數據時候告訴控制器怎麼操作
		作用:URL映射。

	5、@GetMapping
		@RequestMapping(method = RequestMethod.GET)的簡寫
		作用:對應查詢,表明是一個查詢URL映射

	6、@PostMapping
		@RequestMapping(method = RequestMethod.POST)的簡寫
		作用:對應增加,表明是一個增加URL映射

	7、@PutMapping
		@RequestMapping(method = RequestMethod.PUT)的簡寫
		作用:對應更新,表明是一個更新URL映射

	8、@DeleteMapping
		@RequestMapping(method = RequestMethod.DELETE)的簡寫
		
	9.1 @PathVariable
		使用@PathVariable時,URL是這樣的:http://host:port/path/參數值
	9.2 @RequestParam
		使用@RequestParam時,URL是這樣的:http://host:port/path?參數名=參數值
service層:
	1.@service
		用於標註業務層組件
dao層:
	1.@Repository
		是用來註解接口,@Repository註解可以標記在任何的類上,用來表明該類是用來執行與數據庫相關的操作(即dao對象),並支持自動處理數據庫操作產生的異常
配置:

@PropertySource 和 @ Value

新建配置文件 db.properties

鍵=值

新建實體類

@Component
@PropertySource("classpath:db.properties")
class XX{
	@Value("${url}")
    private String 屬性;
    // get set...
}

測試類注入 XX類

@Autowired
private XX xx;

ConfigurationProperties

**注入屬性值 **

配置文件

student:
  name: zhangsan

相對應的學生類

@ConfigurationProperties(prefix = "student")
@Component
public class Student {
    private String name;

測試類

@RestController
public class Demo {
    @Autowired
    private Student stu;

    @Autowired
    private Student student;

    @RequestMapping("/hello")
    @ResponseBody
    public List hello(){
        ArrayList<Object> list = new ArrayList<>();
        list.add(student);
        return list;
    }
}

當用戶訪問 hello 時, 能夠獲取到 配置文件中設置的 學生的name值
中文亂碼問題 記得修改全局編碼格式 爲UTF-8

後續內容

# 整合 Thymeleaf 模板引擎
# 整合Mybatis
# 整合redis
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章