通过@Enable*注解触发Spring Boot配置

Spring Boot:定制自己的starter一文最后提到,触发Spring Boot的配置过程有两种方法:

  1. spring.factories:由Spring Boot触发探测classpath目录下的类,进行自动配置;
  2. @Enable:有时需要由starter的用户触发*查找自动配置文件的过程。

How Do

  • 接着上篇文章的例子,首先将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

由starter的用户手动触发配置

可以看出我们自己定义的注解起作用了。如果没有spring.factories,那么在程序启动的时候Spring Boot的自动配置机制不会试图解析DbCountAutoConfiguration类。一般来说,@Component注解的作用范围就是在BookPubApplication所在的目录以及各个子目录,即com.test.bookpub.*,而DbCountAutoConfiguration是在org.test.bookpubstarter.dbcount目录下,因此不会被扫描到。

@EnableDbCounting注解通过@Import(DbCountAutoConfiguration.class)找到对应的配置类,因此通过用@EnableDbCounting修饰BookPubApplication,就是告诉Spring Boot在启动过程中要把DbCountAutoConfiguration加入到应用上下文中。

时间: 2024-08-01 11:46:17

通过@Enable*注解触发Spring Boot配置的相关文章

Spring Boot 配置优先级顺序

一般在一个项目中,总是会有好多个环境.比如: 开发环境 -> 测试环境 -> 预发布环境 -> 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一点不同,配置读取可是一个让人有点伤脑筋的问题. Spring Boot提供了一种优先级配置读取的机制来帮助我们从这种困境中走出来. 常规情况下,我们都知道Spring Boot的配置会从application.properties中读取.实际上,从resource目录下的application.propert

spring boot 配置redis缓存

问题描述 spring boot 配置redis缓存 环境:spring boot+java8,spring版本为4以上 用spring boot 配置redis缓存时报错如下: java.lang.IllegalStateException: No CacheResolver specified, and no unique bean of type CacheManager found. Mark one as primary (or give it the name 'cacheManag

深入实践Spring Boot1.5 关于Spring Boot配置

1.5 关于Spring Boot配置 关于Spring Boot配置,可以在工程的resources文件夹中创建一个application.properties或application.yml文件,这个文件会被发布在classpath中,并且被Spring Boot自动读取.这里推荐使用application.yml文件,因为它提供了结构化及其嵌套的格式,例如,可以按如下所示配置上面的工程,将默认端口改为80,并且将Tomcat的字符集定义为UTF-8. server:     port: 8

《深入实践Spring Boot》一1.5 关于Spring Boot配置

1.5 关于Spring Boot配置 关于Spring Boot配置,可以在工程的resources文件夹中创建一个application.properties或application.yml文件,这个文件会被发布在classpath中,并且被Spring Boot自动读取.这里推荐使用application.yml文件,因为它提供了结构化及其嵌套的格式,例如,可以按如下所示配置上面的工程,将默认端口改为80,并且将Tomcat的字符集定义为UTF-8. server: port: 80 to

【spring boot】4.spring boot配置多环境资源文件

一个spring boot 项目在开发环境.测试环境.生产环境下,好多的配置都是不尽相同的.所以配置多分的资源文件,仅仅在部署在不同环境的时候,选择激活不同的资源文件就可以实现多环境的部署.   项目结构如下:   1.配置多个环境下的不同的资源文件 多个资源文件的格式如下: application-{profile}.properties {profile}自定义的不同环境标识,本项目中分别对应如下: ==============================================

Spring Boot:定制自己的starter

在学习Spring Boot的过程中,接触最多的就是starter.可以认为starter是一种服务--使得使用某个功能的开发者不需要关注各种依赖库的处理,不需要具体的配置信息,由Spring Boot自动通过classpath路径下的类发现需要的Bean,并织入bean.举个例子,spring-boot-starter-jdbc这个starter的存在,使得我们只需要在BookPubApplication下用@Autowired引入DataSource的bean就可以,Spring Boot会

《Spring Boot Cookbook》阅读笔记

声明1:该系列教程已经在极客学院上线:spring-boot cookbook 声明2:本博客文章需征得作者同意后方可转载 作为后端开发,Spring Boot值得拥有 从技术雷达 : 关于技术趋势的分析报告和Profile of successful Java developer in 2016这两篇文章中都可以看出,作为Java开发人员,Spring Boot已经成为你不得不尽快补充的一项技能. 最近一个月一直在学习Spring Boot框架,在阅读<Spring Boot Cookbook

【Spring】Spring高级话题-@Enable***注解的工作原理

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] @EnableAspectJAutoProxy @EnableAspectJAutoProxy注解 激活Aspect自动代理 <aop:aspectj-autoproxy/> 开启对AspectJ自动代理的支持. 在用到AOP的自动代理的时候用,如果你理解了Java的动态代理,很容易的就会熟悉AOP的自动代理的. @EnableAsync @EnableAsync注解开启异步方法

Spring Boot自动配置

在上篇文章如何运行Spring Boot应用中,已经熟悉了如何通过maven或者gradle创建一个Spring Boot应用,这篇文章主要学习Spring Boot的自动配置,包括注解的使用以及一些配置约束等等. 关于Spring Boot的特性介绍,可以参考Spring Boot特性. 主应用类 在Spring Boot应用中,我们通常将主应用类放置于应用的根包中,例如,com.javachen.example.主应用类有main方法,并且使用了@EnableAutoConfiguratio