1. 程式人生 > 程式設計 >自定義的Spring Boot starter如何設定自動配置註解

自定義的Spring Boot starter如何設定自動配置註解

本文首發於個人網站:自定義的Spring Boot starter如何設定自動配置註解

Spring Boot實戰之定製自己的starter一文最後提到,觸發Spring Boot的配置過程有兩種方法:

  1. spring.factories:由Spring Boot觸發探測classpath目錄下的類,進行自動配置;
  2. @Enable*:有時需要由starter的使用者觸發查詢自動配置檔案的過程。

實戰

  • 接著上篇文章的例子,首先將spring.factories中的內容註釋掉
#org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
#com.test.bookpubstarter.dbcount.DbCountAutoConfiguration 複製程式碼
  • 建立元註解(meta-annotation),即在db-count-starter/src/main/java/org/test/bookpubstarter/dbcount目錄下新建EnableDbCounting.java檔案。
package com.test.bookpubstarter.dbcount;

import org.springframework.context.annotation.Import;
import java.lang.annotation.*;

@Target
(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Import(DbCountAutoConfiguration.class) @Documented public @interface EnableDbCounting { } 複製程式碼
  • 在BookPubApplication類中刪去之前手動建立的DbCountRunner的spring bean,然後用*@EnableDbCounting*註解修飾BookPubApplication類。
package com.test.bookpub;

import com.test.bookpubstarter.dbcount.EnableDbCounting;
import
org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @EnableDbCounting public class BookPubApplication { public static void main(String[] args) { SpringApplication.run(BookPubApplication.class,args); } } 複製程式碼
  • 啟動應用程式,設定日誌級別為DEBUG

由starter的使用者手動觸發配置

可以看出我們自己定義的註解起作用了。如果沒有spring.factories,那麼在程式啟動的時候Spring Boot的自動配置機制不會試圖解析DbCountAutoConfiguration類。一般來說,@Component註解的作用範圍就是在BookPubApplication所在的目錄以及各個子目錄,即com.test.bookpub.*,而DbCountAutoConfiguration是在org.test.bookpubstarter.dbcount目錄下,因此不會被掃描到。

@EnableDbCounting註解通過*@Import(DbCountAutoConfiguration.class)*找到對應的配置類,因此通過用@EnableDbCounting修飾BookPubApplication,就是告訴Spring Boot在啟動過程中要把DbCountAutoConfiguration加入到應用上下文中。

Spring Boot 1.x系列

  1. Spring Boot的自動配置、Command-line-Runner
  2. 瞭解Spring Boot的自動配置
  3. Spring Boot的@PropertySource註解在整合Redis中的使用
  4. Spring Boot專案中如何定製HTTP訊息轉換器
  5. Spring Boot整合Mongodb提供Restful介面
  6. Spring中bean的scope
  7. Spring Boot專案中使用事件派發器模式
  8. Spring Boot提供RESTful介面時的錯誤處理實踐
  9. Spring Boot實戰之定製自己的starter
  10. Spring Boot專案如何同時支援HTTP和HTTPS協議

本號專注於後端技術、JVM問題排查和優化、Java面試題、個人成長和自我管理等主題,為讀者提供一線開發者的工作和成長經驗,期待你能在這裡有所收穫。

javaadu