最近阅读spring boot源码时发现,发现当spring使用ConfigurationClassParser加载使用@Configuration注解类后,会使用AutoConfigurationImportSelector对加载的

@Configuration注解的类进行一次过滤。当AutoConfigurationImportSelector过滤完成后会自动加载类路径下Jar包中META-INF/spring.factories文件中 AutoConfigurationImportListener的实现类

并触发fireAutoConfigurationImportEvents事件。

 实现AutoConfigurationImportListener接口,当fireAutoConfigurationImportEvents事件被触发时,打印出已经注册到spring上下文中的@Configuration注解的类,打印出被阻止注册到spring

上下文中的@Configuration注解类

 package com.torlight;

 import org.springframework.boot.autoconfigure.AutoConfigurationImportEvent;
import org.springframework.boot.autoconfigure.AutoConfigurationImportListener; public class SysoutAutoConfigurationImportListener implements
AutoConfigurationImportListener { @Override
public void onAutoConfigurationImportEvent(
AutoConfigurationImportEvent event) { System.out.println("================output print registered configurations");
for(String str:event.getCandidateConfigurations()){
System.out.println(">>> the configuration => "+ str +" has registered ");
} System.out.println("================output print exclusions configurations");
for(String str:event.getExclusions()){
System.out.println(">>> the configuration =>"+ str +" has exclusion ");
} } }

在src/main/resources/META-INF/spring.factories 文件中增加

org.springframework.boot.autoconfigure.AutoConfigurationImportListener=com.torlight.SysoutAutoConfigurationImportListener

控制台输出:

================output print registered configurations
>>> the configuration => org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration has registered
>>> the configuration => org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration has registered
>>> the configuration => org.springframework.boot.actuate.autoconfigure.AuditAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration has registered
>>> the configuration => org.springframework.boot.actuate.autoconfigure.CacheStatisticsAutoConfiguration has registered
>>> the configuration => org.springframework.boot.actuate.autoconfigure.MetricRepositoryAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration has registered
>>> the configuration => org.springframework.boot.actuate.autoconfigure.PublicMetricsAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration has registered
>>> the configuration => org.springframework.boot.actuate.autoconfigure.InfoContributorAutoConfiguration has registered
>>> the configuration => org.springframework.boot.actuate.autoconfigure.HealthIndicatorAutoConfiguration has registered
>>> the configuration => org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration has registered
>>> the configuration => org.springframework.boot.actuate.autoconfigure.EndpointMBeanExportAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration has registered
>>> the configuration => org.springframework.boot.actuate.autoconfigure.ManagementServerPropertiesAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration has registered
>>> the configuration => org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration has registered
>>> the configuration => org.springframework.boot.actuate.autoconfigure.MetricExportAutoConfiguration has registered
>>> the configuration => org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration has registered
>>> the configuration => org.springframework.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration has registered
>>> the configuration => org.springframework.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration has registered
>>> the configuration => org.springframework.boot.actuate.cloudfoundry.CloudFoundryActuatorAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.aop.AopAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration has registered
>>> the configuration => org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration has registered
>>> the configuration => org.springframework.boot.devtools.autoconfigure.DevToolsDataSourceAutoConfiguration has registered
>>> the configuration => org.springframework.boot.devtools.autoconfigure.LocalDevToolsAutoConfiguration has registered
>>> the configuration => org.springframework.boot.devtools.autoconfigure.RemoteDevToolsAutoConfiguration has registered
================output print exclusions configurations
>>> the configuration =>org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration has exclusion

spring boot 扩展之AutoConfigurationImportListener的更多相关文章

  1. Spring Boot 扩展点应用之工厂加载机制

    Spring 工厂加载机制,即 Spring Factories Loader,核心逻辑是使用 SpringFactoriesLoader 加载由用户实现的类,并配置在约定好的META-INF/spr ...

  2. 精尽Spring Boot源码分析 - Condition 接口的扩展

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  3. Spring Boot 自动装配(二)

    目录 目录 前言 1.起源 2.Spring Boot 自动装配实现 2.1.@EnableAutoConfiguration 实现 2.1.1. 获取默认包扫描路径 2.1.2.获取自动装配的组件 ...

  4. Spring Boot 启动原理分析

    https://yq.aliyun.com/articles/6056 转 在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启 ...

  5. Spring Boot 实战与原理分析视频课程

    Spring Boot 实战与原理分析视频课程 链接:https://pan.baidu.com/share/init?surl=PeykcoeqZtd1d9lN9V_F-A 提取码: 关注公众号[G ...

  6. Spring Boot实践——事件监听

    借鉴:https://blog.csdn.net/Harry_ZH_Wang/article/details/79691994 https://blog.csdn.net/ignorewho/arti ...

  7. spring boot应用启动原理分析

    spring boot quick start 在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个We ...

  8. Spring Boot应用启动原理分析(转)

    在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个Web Server. 如果之前没有使用过sprin ...

  9. Spring boot参考指南

    介绍 转载自:https://www.gitbook.com/book/qbgbook/spring-boot-reference-guide-zh/details 带目录浏览地址:http://ww ...

随机推荐

  1. Centos 7.3 下 的QT 输入中文

    我的QT 目录在 /opt/Qt/Tools/QtCreator,进入到 /bin 目录,然后运行 ./qtcreator.sh  就可以运行 在qtcreator.sh 中加入 export QT_ ...

  2. bzoj2962 序列操作

    2962: 序列操作 Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 1145  Solved: 378[Submit][Status][Discuss ...

  3. 2018-2019, ICPC, Asia Yokohama Regional Contest 2018 K

    传送门:https://codeforces.com/gym/102082/attachments 题解: 代码: /** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓ * ┃ ┃ * ┃ ━ ...

  4. proxy vue3.0

    <html> <head> <meta charset="UTF-8" /> <meta name="viewport" ...

  5. Linux查找后执行命令

    find . -name '*.jsp' -type f -print -exec rm -rf {} \; 在当前目录下找到jsp文件并删除.

  6. Jenkins使用教程之用户权限管理(包含插件的安装)

    在工作的过程中由于分工合作的关系,我们因为工作内容的不同可能分为不同的组织里,但是jenkins默认的权限管理并没有用户组的概念,所以我们需要第三方插件的支持来解决问题.插件:Role-based A ...

  7. HTML 5 Web 存储:localStorage和sessionStorage

    本文内容摘自http://www.w3school.com.cn/ 在客户端存储数据 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 sessi ...

  8. 一个ASP.NET中使用的MessageBox类

    /// <summary> /// 自定义信息对话框 /// </summary> public class MessageBox { /// <summary> ...

  9. 微信小程序开发(四)线程架构和开发步骤

    线程架构 从前面的章节我们可以知道,.js文件是页面逻辑处理层.我们可以按需在app.js和page.js中添加程序在生命周期的每个阶段相应的事件.如在页面的onLoad时进行数据的下载,onShow ...

  10. iOS数据存取---iOS-Apple苹果官方文档翻译

    CHENYILONG Blog iOS数据存取---iOS-Apple苹果官方文档翻译 数据存取/*技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http:// ...