springboot學習筆記(一)——基礎知識

maven依賴

  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

啓動類

  • @SpringBootApplication包括
    • Spring的@Configuration:標明該類使用Spring基於Java的配置。
    • Spring的@ComponentScan:啓用組件掃描,Web控制器類和其他組件才能被
      自動發現並註冊爲Spring應用程序上下文裏的Bean。
    • Spring Boot 的 @EnableAutoConfiguration :就是這一行配置開啓了Spring Boot自動配置的魔力,讓你不用再寫成的配置了
  • run 方法

通過調用run,將業務委託給了Spring Boot的SpringApplication類。SpringApplication將引導我們的應用,啓動Spring,相應地啓動被自動配置的Tomcat web服務器。我們需要將 helloMain.class 作爲參數傳遞給run方法來告訴SpringApplication誰是主要的Spring組件。爲了暴露任何的命令行參數,args數組也會被傳遞過去。

package com.antRain;

import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//標識持久層mapper接口,用來找到mapper對象
@MapperScan("com.antRain.Dao")
@SpringBootApplication
public class helloMain {

   public static void main(String[] args) {
        SpringApplication application = new SpringApplication(helloMain.class);
        application.setBannerMode(Banner.Mode.OFF);
        application.run(args);
    }
}
  • SpringBoot相關注解

    • @EnableAutoConfiguration自動載入應用程序所需的所有Bean。該註解組合了@Import註解.
    • @Import註解導入了EnableAutoCofigurationImportSelector類,它使用SpringFactoriesLoader.loaderFactoryNames方法來掃描具有META-INF/spring.factories文件的jar包。而spring.factories裏聲明瞭有哪些自動配置
    • @SpingBootApplication是 SpringBoot的核心註解,主要目的是開啓自動配置。它也是一個組合註解,主要組合了@Configurer,@EnableAutoConfiguration(核心)和@ComponentScan。可以通過@SpringBootApplication(exclude={想要關閉的自動配置的類名.class})來關閉特定的自動配置
    • @ImportResource加載xml配置的
    • @AutoConfigureAfter在指定的自動配置類之後再配置
    • @AutoConfigureBefore自動配置類需要在另外指定的自動配置類配置之前
  • Spring Boot 配置文件加載優先級如下:

Devtools全局設置屬性在路徑 (~/.spring-boot-devtools.properties 當devtools激活的時候).
測試用例上的 @TestPropertySource .
測試用例上的 @SpringBootTest#properties註解.
命令行參數.
配置在SPRING_APPLICATION_JSON 的屬性(環境變量或系統屬性中內嵌的內聯JSON).
ServletConfig初始化參數.
ServletContext 初始化參數.
配置在 java:comp/env的 JNDI(Java Naming and Directory Interface) 屬性.
Java系統屬性 (System.getProperties()).
操作系統OS(Operating System)環境變量.
RandomValuePropertySource 中的屬性只包括在包random.*.
沒有打進jar包的Profile-specific 應用屬性 (application-{profile}.properties 和 YAML ).
打進jar包中的Profile-specific 應用屬性 (application-{profile}.properties 和 YAML).
沒有打進jar包的應用配置 (application.properties 和 YAML).
打進jar包中的應用配置(application.properties 和 YAML).
@Configuration類上的@PropertySource註解 .
默認屬性 (配置在文件 SpringApplication.setDefaultProperties).

  • 配置文件位置讀取優先級
    • application.properties 或者 application.yml 讀取優先級如下:
    • file:./config/當前位置的子目錄/config 下
    • file:./當前位置
    • classpath:/config/classpath /config 的包中
    • classpath:/classpath的根目錄

yml

  • 以數據爲中心,比json、xml等更適合做配置文件;
server:
    port: 8081
    path: /hello

1、基本語法

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

2、值的寫法

  • 字面量:普通的值(數字,字符串,布爾)

k: v:字面直接來寫;
字符串默認不用加上單引號或者雙引號;
“”:雙引號;不會轉義字符串裏面的特殊字符;特殊字符會作爲本身想表示的意思
‘’:單引號;會轉義特殊字符,特殊字符最終只是一個普通的字符串數據

  • 對象、Map(屬性和值)(鍵值對):

k: v:在下一行來寫對象的屬性和值的關係;注意縮進
對象還是k: v的方式
行內寫法:

friends: {lastName: zhangsan,age: 18}
  • 數組(List、Set):

用- 值表示數組中的一個元素

users:
 - 張三
 - 李四

行內寫法

users: [張三,李四]

controller

  • application.yml
user:
  id: 1
  name: lisi
  pawd: 123456
  • Java類
package com.antRain.controller;

import com.antRain.service.UserService;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@Controller
@ComponentScan({"com.antRain.service"})
public class hello {

    //讀取配置文件裏面的內容
    @Value("${user.id}")
    private  Integer id;

    @ResponseBody
    @RequestMapping("/hello")
    public String hello(){
        return  "hello 用戶"+id;
    }

    @Autowired
    private UserService userService;

    @RequestMapping("getUser/{id}")
    public String GetUser(@PathVariable int id){
        return userService.getUser(id).toString();
    }

}

/*
* SpringMVC部分
    @RequestMapping 用於映射Web請求,包括訪問路徑和參數
    ResponseBody 支持將返回值放在response內,而不是一個頁面
    @PathVariable 用於接收路徑參數
    @RestController 該註解爲一個組合註解,相當於@Controller和@ResponseBody的組合,註解在類上,意味着,該Controller的所有方法都默認加上了@ResponseBody
    @ControllerAdvice 通過該註解,我們可以將對於控制器的全局配置放置在同一個位置,註解了@Controller的類的方法可使用@ExceptionHandler、@InitBinder、@ModelAttribute註解到方法上,
    @ExceptionHandler 用於全局處理控制器裏的異常
    @InitBinder 用來設置WebDataBinder,WebDataBinder用來自動綁定前臺請求參數到Model中。
    @ModelAttribute 本來的作用是綁定鍵值對到Model裏,在@ControllerAdvice中是讓全局的@RequestMapping都能獲得在此處設置的鍵值對。
*
*
* */
  • 類的相關注解

    • @Controller控制層: 用於標記在一個類上,使用它標記的類就是一個SpringMvc Controller對象,分發處理器會掃描使用該註解的類的方法。並檢測該方法是否使用了@RequestMapping註解。
    • @RestController: 告訴Spring以字符串的形式渲染結果,並直接返回給調用者其實就是@Controller和@ResponseBody註解加在一起返回json數據
  • 方法的相關注解

    • @responseBody註解的作用是將controller的方法返回的對象通過適當的轉換器轉換爲指定的格式之後,寫入到response對象的body區,通常用來返回JSON數據或者是XML, 一般在異步獲取數據時使用;
    • @RequestMapping 是一個用來處理請求地址映射的註解,可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作爲父路徑; 用於方法上,表示在類的父路徑下追加方法上註解中的地址將會訪問到該方法
  • Spring註解

    • @Service用於標註業務層組件
    • @Controller用於標註控制層組件(如struts中的action)
    • @Repository用於標註數據訪問組件,即DAO組件
    • @Component泛指組件,可以註解其他類註解,當組件不好歸類的時候,我們可以使用這個註解進行標註
    • @Configuration用於定義配置類,可替換xml配置文件,被註解的類內部包含有一個或多個被@Bean註解的方法,這些方法將會被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext類進行掃描,並用於構建bean定義,初始化Spring容器。
    • @ComponentScan註解默認就會裝配標識了@Controller,@Service,@Repository,@Component註解的類到spring容器中
    • @Conditional註解可以根據代碼中設置的條件裝載不同的bean,在設置條件註解之前,先要把裝載的bean類去實現Condition接口,然後對該實現接口的類設置是否裝載的條件。
    • @Import通過導入的方式實現把實例加入springIOC容器中。可以在需要時將沒有被Spring容器管理的類導入至Spring容器中。
    • @ImportResource導入配置文件。
  • SpringMvc 註解

    • @RequestMapping 用於映射Web請求,包括訪問路徑和參數
    • @ResponseBody 支持將返回值放在response內,而不是一個頁面,默認類中的方法都會以 json 的格式返回
    • @PathVariable 用於接收路徑參數
    • @RestController 該註解爲一個組合註解,相當於@Controller和@ResponseBody的組合,註解在類上,意味着,該Controller的所有方法都默認加上了@ResponseBody
    • @ControllerAdvice 通過該註解,我們可以將對於控制器的全局配置放置在同一個位置,註解了@Controller的類的方法可使用@ExceptionHandler、@InitBinder、@ModelAttribute註解到方法上,
    • @ExceptionHandler 用於全局處理控制器裏的異常
    • @InitBinder 用來設置WebDataBinder,WebDataBinder用來自動綁定前臺請求參數到Model中。
    • @ModelAttribute 本來的作用是綁定鍵值對到Model裏,在@ControllerAdvice中是讓全局的 @RequestMapping都能獲得在此處設置的鍵值對。

restful接口

  • GET:一般用於查詢數據,不辦函數據的更新以及插入操作。由於明文傳輸的關係,我們一般用來獲取一些無關用戶的信息。
  • POST:一般用於數據的插入操作,也是使用最多的傳輸方式,但是在H5調用時會有跨域的問題,一般使用JSONP來解決。
  • PUT:我們使用PUT方式來對數據進行更新操作。
  • DELETE:用於數據刪除,注意在數據庫內是邏輯刪除(改變數據狀態,用戶不再查詢得到,但還保留在數據庫內)還是物理刪除(真刪了)。

@Value獲取值和@ConfigurationProperties獲取值比較

@ConfigurationProperties @Value
功能 批量注入配置文件中的屬性 一個個指定
鬆散綁定(鬆散語法) 支持 不支持
SpEL 不支持 支持
JSR303數據校驗 支持 不支持
複雜類型封裝 支持 不支持
  • application.yml
car:
  color: white
  length: 4499
  name:
    - porsche
    - Bill
  buy: 2019/12/25
  parts:  {"峯值扭矩": "260Nm", "加速度": 50}
  • Car.java
package com.antRain.bean;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;

@Component
@ConfigurationProperties(prefix = "car")
public class Car {
    private List<String> name; //車的名稱
    @Value("${car.color}")
    private String color ;//顏色
    @Value("#{2*2100}")
    private Integer length;//長度mm
    private Date buy;//購買日期
    private Map<String,Object> parameter;//參數信息
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章