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;//參數信息
}