在Spring Boot:定制自己的starter一文最后提到,觸發(fā)Spring Boot的配置過程有兩種方法:
- spring.factories:由Spring Boot觸發(fā)探測(cè)classpath目錄下的類,進(jìn)行自動(dòng)配置;
- @Enable:有時(shí)需要由starter的用戶觸發(fā)*查找自動(dòng)配置文件的過程。
#org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
#com.test.bookpubstarter.dbcount.DbCountAutoConfiguration
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 {
}
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);
}
}
http://wiki.jikexueyuan.com/project/spring-boot-cookbook-zh/images/606.png" alt="由starter的用戶手動(dòng)觸發(fā)配置" />
可以看出我們自己定義的注解起作用了。如果沒有spring.factories,那么在程序啟動(dòng)的時(shí)候Spring Boot的自動(dòng)配置機(jī)制不會(huì)試圖解析DbCountAutoConfiguration類。一般來說,@Component注解的作用范圍就是在BookPubApplication所在的目錄以及各個(gè)子目錄,即com.test.bookpub.*,而DbCountAutoConfiguration是在org.test.bookpubstarter.dbcount目錄下,因此不會(huì)被掃描到。
@EnableDbCounting注解通過@Import(DbCountAutoConfiguration.class)找到對(duì)應(yīng)的配置類,因此通過用@EnableDbCounting修飾BookPubApplication,就是告訴Spring Boot在啟動(dòng)過程中要把DbCountAutoConfiguration加入到應(yīng)用上下文中。