重學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);
}