在这个注解中,最重要的是它导入了一个类EnableAutoConfigurationImportSelector

它是一个ImportSelector接口的实现类,而ImportSelector接口中的selectImports方法所返回的类将

被Spring容器管理起来。


再看AutoConfigurationImportSelector类,它不光实现了ImportSelector接口,还实现了很多其它的Aware接口,分别表示在某个时机会被回调,我们看一下Aware接口就知道了。

我们可以知道,所有的aware都优先于selectImports方法执行,也就是说selectImports方法最后执行,那么在它执行的时候所有需要的资源都已经获取到了(就是那四个成员变量)

那我们看看selectImports都干了什么

看图说话:

1、加载META-INF/spring-autoconfigure-metadata.properties文件

2、获取注解的属性及其值(PS:注解指的是@EnableAutoConfiguration注解)

3、在classpath下所有的META-INF/spring.factories文件中查找org.springframework.boot.autoconfigure.EnableAutoConfiguration的值,并将其封装到一个List中返回

4、对上一步返回的List中的元素去重、排序

5、依据第2步中获取的属性值排除一些特定的类

6、对上一步中所得到的List进行过滤,过滤的依据是条件匹配。这里用到的过滤器是org.springframework.boot.autoconfigure.condition.OnClassCondition最终返回的是一个ConditionOutcome[]数组。(PS:很多类都是依赖于其它的类的,当有某个类时才会装配,所以这次过滤的就是根据是否有某个class进而决定是否装配的。这些类所依赖的类都写在META-INF/spring-autoconfigure-metadata.properties文件里)



本文转自   手不要乱摸  51CTO博客,原文链接:http://blog.51cto.com/5880861/1970542

SpringBoot中@EnableAutoConfiguration注解的作用相关推荐

  1. Spring中@AliasFor注解的作用及原理

    本文基于Springboot 2.1.6.RELEASE 版本分析. 关于@AliasFor注解,曾提过的一个issue Explicit attribute overrides configured ...

  2. SpringBoot 中常用注解@PathVaribale/@RequestParam/@GetMapping介绍

    SpringBoot 中常用注解@PathVaribale/@RequestParam/@GetMapping介绍 本篇博文将介绍几种如何处理url中的参数的注解@PathVaribale/@Requ ...

  3. java参数值注入_在springboot中使用注解将值注入参数的操作

    后端的许多管理系统需要登陆者的信息,如shiro登陆后,会将登陆者的信息存储在shiro的session,在使用时需要多行代码获取用户信息.可以把获取在shiro中的登陆者信息封装在一个类中,使用时获 ...

  4. springboot中得注解_Spring以及SpringBoot中的常用的注解小结

    一.注解的基本概念 Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法.Annotion(注解)是一个接口,程序可以通过反射来获 ...

  5. springboot中@scheduled注解使用备注

    参考文章: https://cloud.tencent.com/developer/article/1497610 https://blog.csdn.net/Rice_kil/article/det ...

  6. Spring中常用注解及其作用

    1.@Component 它是这些注解里面最普通的一个注解,一般用于把普通pojo实例化到spring容器中. @Controller和@Service和@Repository是它的特殊情况,当一个类 ...

  7. SpringBoot中condition注解的使用

    在项目中,有时会遇到我们的Configuration.Bean.Service等等的bean组件需要依条件按需加载的情况. springboot中提供了一系列@Condition* 注解来处理有条件注 ...

  8. SpringBoot中常见注解

    @Configuration用在类上,让Spring注入被注解的类的实例. @EnableConfigurationProperties(CustomProperty.class) 使使用@Confi ...

  9. @transaction使自定义注解失效_【完美】SpringBoot中使用注解来实现 Redis 分布式锁...

    一.业务背景 有些业务请求,属于耗时操作,需要加锁,防止后续的并发操作,同时对数据库的数据进行操作,需要避免对之前的业务造成影响. 二.分析流程 使用 Redis 作为分布式锁,将锁的状态放到 Red ...

最新文章

  1. 怎么测试一个人的计算机应用能力,对专业技术人员计算机应用能力考试的思考...
  2. mac 安装 nginx
  3. vs2010中编译zint的问题
  4. Super BOM应用步骤总结
  5. 采用SwipeFreshLayout+Recyclerview实现下拉刷新和上拉加载更多以及CoordinatorLayout的引入
  6. node中使用短信验证功能(阿里云为例)
  7. Linux 命令行提示符路径显示
  8. mssql 设置自增字段的起始值
  9. 计算机基础知识问卷,计算机基础知识情况问卷调查
  10. 了解Google发展的下一代搜索Knowledge Graph:Emily Moxley访谈录
  11. 【面试个人成长】2021年过半,社招和校招的经验之谈
  12. LF-YOLO: A Lighter and Faster YOLO for Weld Defect Detection of X-ray Image
  13. jQuery-动画效果(图片抽奖案例)
  14. 动力节点 mysql 郭鑫_动力节点 mysql 郭鑫 34道经典的面试题二
  15. 字符串函数 tirm 的作用
  16. howler.js音频控制js库
  17. 【大话数据结构C语言】57 平衡二叉树(AVL树)
  18. 案例分析|爆款品牌完美日记的KOL投放策略
  19. csdn官网第一次写博客 一直显示不要使用默认标题
  20. bigemap 软件百度课程

热门文章

  1. python工程师薪资坑吗-Python中反人类直觉的特性,你踩过坑吗?
  2. python和java哪个-Python和Java到底哪个更好?
  3. python是不是特别垃圾-Python里的垃圾回收机制是什么意思,搞不懂?
  4. python实训项目-Python开发基础-项目实训-在线投票系统.pptx
  5. win10计算机如何切换用户名,Win10怎么修改本地账号的用户名 win10本地账户改名图文教程...
  6. LeetCode Single Number II(位操作)
  7. 2018-2019 20165237网络对抗 Exp5 MSF基础应用
  8. Asp.NetCore MVC Web 应用
  9. Android布局之相对布局——RelativeLayout
  10. MySQL连接问题【如何解决MySQL连接超时关闭】