自定义的Spring-Boot-starter如何设置自动配置注解

4次阅读

共计 1973 个字符,预计需要花费 5 分钟才能阅读完成。

本文首发于个人网站:自定义的 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

可以看出我们自己定义的注解起作用了。如果没有 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 面试题、个人成长和自我管理等主题,为读者提供一线开发者的工作和成长经验,期待你能在这里有所收获。

正文完
 0