1. 程式人生 > 其它 >重學SpringBoot. step1 全註解的SpringBoot

重學SpringBoot. step1 全註解的SpringBoot

參考:《深入淺出SpringBoot 2.x》

全註解的SpringBoot

使用者可以通過註解將所需要的物件,存放到IOC容器中,然後SpringBoot可以根據這些需要使用的情況,自動注入到需要的Bean中。

Component 元件

如果你需要重複的使用一個類,而這個類又不屬於業務,只是資料處理,那麼就可以使用Component註解標記該類,然後使用ComponentScan即可將該類例項化到容器中。

ComponentScan就是一個掃描器,在SpringApplication中也帶著一個這樣的掃描器。有這種包含的掃描,那麼又引出了ComponentScan註解中引出了excludeFilters屬性,可以指定哪些類不被掃描器掃描到。

可以看下SpringBootApplication註解中,也使用了ComponentScan的註解,也就是SpringBoot應用的啟動類同級的包,或者是類,預設會被掃描器掃描到。

在Configuration的類中,可以定義一些帶@Bean註解的方法,這些方法的返回值,被加入到IOC容器中,如果不指定Bean的Name屬性,那麼將會使用該方法的方法名作為物件的名稱存入到IOC容器中。

依賴注入

依賴注入,用的是多型來體現,一個物件,多種形態,然後用@Autowired給物件注入依賴,之後可以通過@Primary設定注入時候的容器中的例項的優先順序和@Quelifier直接指定bean的名稱。

這裡我感覺還是很混亂,容器中的例項,一直沒有個名稱,一直說是用Bean裝配到IOC容器中,這裡其實已經理論混亂了。

Bean例項存放在容器之中,但Bean對應的例項有多種形態,也稱之為Bean的依賴,Bean有多種依賴,所以需要進行選擇,不然就會報錯。所以注入的Bean的名稱都是唯一的。

讀取屬性檔案

@Value("${...}") 這樣的佔位符可以讀取application.yml的的配置

還有一種讀取的方法是用類來讀取,

需要在類上加兩個註解,Component,ConfgurationProperties("字首名")

然後就可以讀取指定的配置

例如: file.path = "/home/files"

@Component
@ConfigurationProperties("file")
@Data
public class Path(){
    private String path;// = file.path
}

Bean的作用域

Bean可以直接設定其型別,不用的作用域會產生不同的Bean,或者相同的作用域,每次都會重新整理。

所以可以使用@Scope註解給每個SpringBoot的元件指定在WEB中訪問的範圍。

@Profile

載入多套配置檔案的註解。

一個很常見的例子,多個測試環境中有不同的資料庫,在這裡已經得到了答案。

可以通過Profile直接給指定的方法來指定。

本來我以為是用來同時載入不同的配置檔案

書上講的不是特別好,就是spring.profiles.active也可以指定其載入的檔案

spring:
    profiles: 
        active:  dev

SpringEl

在@Value註解中使用El表示式,可以寫一些簡單的程式碼運算,或者程式碼的呼叫


@Value("${file.path}")
private String path;

@Value("#{1+1}")
int a;

@Value("#{T(System).currentTimeMillis()}")
private long time;
@Test
public void test(){
    System.out.println(a);
    System.out.println(time);
}