在 Spring Boot实战之定制自己的starter 一文最后提到,触发Spring Boot的配置过程有两种方法:
#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); } }
可以看出我们自己定义的注解起作用了。如果没有spring.factories,那么在程序启动的时候Spring Boot的自动配置机制不会试图解析 DbCountAutoConfiguration 类。一般来说,@Component注解的作用范围就是在BookPubApplication所在的目录以及各个子目录,即com.test.bookpub.*,而DbCountAutoConfiguration是在org.test.bookpubstarter.dbcount目录下,因此不会被扫描到。
@EnableDbCounting 注解通过 @Import(DbCountAutoConfiguration.class) 找到对应的配置类,因此通过用@EnableDbCounting修饰BookPubApplication,就是告诉Spring Boot在启动过程中要把DbCountAutoConfiguration加入到应用上下文中。
本号专注于后端技术、JVM问题排查和优化、Java面试题、个人成长和自我管理等主题,为读者提供一线开发者的工作和成长经验,期待你能在这里有所收获。