本文首發於個人網站:http://www.javaadu.online/?p=546
在http://www.javaadu.online/?p=535一文最後提到,觸發Spring Boot的配置過程有兩種方法:
- spring.factories:由Spring Boot觸發探測classpath目錄下的類,進行自動配置;
- @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
可以看出我們自己定義的註解起作用了。如果沒有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系列
- http://www.javaadu.online/?p=487
- http://www.javaadu.online/?p=495
- http://www.javaadu.online/?p=499
- http://www.javaadu.online/?p=515
- http://www.javaadu.online/?p=518
- http://www.javaadu.online/?p=521
- http://www.javaadu.online/?p=526
- http://www.javaadu.online/?p=530
- http://www.javaadu.online/?p=535
- http://www.javaadu.online/?p=538
本號專注於後端技術、JVM問題排查和優化、Java面試題、個人成長和自我管理等主題,為讀者提供一線開發者的工作和成長經驗,期待你能在這裡有所收穫。
閱讀更多 javaadu 的文章