本文首发于个人网站:自定义的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面试题、个人成长和自我管理等主题,为读者提供一线开发者的工作和成长经验,期待你能在这里有所收获。

最新文章

  1. centos7下操作防火墙
  2. js 0.1+0.2!=0.3
  3. 【OpenStack】OpenStack系列1之OpenStack本地开发环境搭建&&向社区贡献代码
  4. 用Masonry实现键盘的收回和弹出
  5. UVA 10499 (13.08.06)
  6. CodeForces 567A Gerald is into Art
  7. Servlet 过滤器
  8. Hbase写数据,存数据,读数据的详细过程
  9. Oracle文章中常用数据表的描述
  10. 媒体查询media参数以及其兼容性问题
  11. 在ARC下,assign和weak的区别
  12. 蒸米一步一步ROP X64学习笔记
  13. Linux开发黑客
  14. ActiveMQ挂了,重启一直无法将所有实例启起来的问题
  15. 如何正确使用QThread
  16. Android 热修复方案Tinker(一) Application改造
  17. python selenium爬取QQ空间方法
  18. 史上最全的浏览器 CSS & JS Hack 手册
  19. VK Cup 2016 - Qualification Round 2 B. Making Genome in Berland
  20. 关于wordpress主题、插件上传和下载问题及其上传图片权限问题解决方案

热门文章

  1. log4j日志不输出的问题
  2. Redis会遇到的问题以及解决方案
  3. 部署Tomcat 环境
  4. C#控件及常用属性
  5. springmvc(二)
  6. Linux 远程登录命令telnet
  7. Java初中级面试笔记及对应视频讲解
  8. Android开发——Toolbar常用设置
  9. Actor 模型中的通信模式
  10. Kafka 学习笔记之 Consumer API