首先肯定是main方法了,但是main方法上有注解,有人就说了,点进去,然后再点进去,会看到xxx注解,import了一个xxx类。然后加载了spring.factory,然后注入那些key对应的value的类
话是这么说不错,但是这不对。这个类看一下肯定是先运行main方法里的run方法啊,咋可能不运行main方法就开始读注解呢?所以一定是先运行main方法里的run方法,到一定的步骤的时候,才加载main方法上的@SpringBootApplication注解。
所以下来就看一下SpringBoot的自动装配这一步步是如何进行的。
main方法这个类也是一个component,也是需要注入的,那么也是需要往context里注入的,同时也要扫描注解,拿到选择器。
在 prepareContext 这个方法的 load 方法 里加载包含main方法的主类SpringbootStudyApplication,所以在当前context里就已经包含了这个启动类对象了。
然后往下走,refreshContext刷新容器的方法。跟进去一直跟到super.refresh(),如下图的这个位置,这部分就属于spring的内容了。
然后跟进去到达下图:这个方法才是核心
跟进去跟到下图这块
所以在上图的for循环中循环到第6个字符串(图中下标为5)的时候,也就是启动类 springbootStudyApplication的时候看一下会发生什么事情。
当循环到springbootStudyApplication的时候进入了else if
configCandidates.add configCandidates是一个集合,在这个方法第一行就定义了。
然后还是这个方法,继续下一步跳过,一直走到下图这里:注意这个注释,解析每一个加了@Configuration注解的类。启动类里是有加这个注解把,把启动类上面的注解点进去就会发现注解里面的注解有@Configuration注解
跟一下上图的new对象的构造方法。下图就是构造方法,可以看到构造方法里有包扫描的解析,有条件判断的解析
继续往下走
往下走
然后往下跟,把断点打在这个类的这一行
debug这个可以看到ann 就是启动类上面的SpringBootApplication注解
到此为止,这里面就完成一件事:启动类里面是否包含注解,如果不包含注解。
到此为止的调用链是这样子,以防下次找不到先截图出来:
然后往回返到这里:可以看到sourceClass有值,看这个dowhile循环
跟进do里的这一行代码,到这里:解析启动类所在的根目录下的组件。例如com.xy下的所有子包里的组件
继续往下走:看这个注释就知道什么意思了,该处理import注解了
那么启动类上的注解的注解里,包含几个import注解呢?
那么代码继续往下走:跟进去
这一行代码是怎么执行,肯定是先执行最外层的processImport,里面的第三个参数是一个方法getImports(),记住我说的话,然后跟进processImport
发现第三个参数的size = 2 ,那也就是说getImports方法的返回值是2,而这两个值刚好是启动类里import的类。
那么看一下getImports这个方法,很有趣,是采用递归调用的方式
当循环递归调用完毕后,结果是:
好了到此为止,说的差不多了,那么下来就是完整的流程:127个类。这个有的版本是124个类,不同版本的springboot这里自动装配的个数会有细微的差异
先是prepareContext(预准备容器)的时候加载启动类,在refresh(刷新容器)的时候加载启动类注解以及该注解里的各种子注解,最重要的是加载 Import 注解,而import注解里倒了几个类,在getCandidateConfigurations方法处打一个断点就可以看一下是如何加载的了。
Candidate这个单词的意思是:被候选的,认定的
@Conditional:自动配置类在一定条件下才能生效
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
近日,“海油发展智能工厂智能注采工具中心”揭牌仪式如期举行,中海油能源发展股份有限公司黄小龙副总经理、七〇六所赵晓燕副所长等一行领导出席揭牌仪式。本次揭牌仪式的成功举办标志着由我所设计实施的我国首条智能注采工具自动装配线在中海油正式投用,也标志着航天科工和中海油的战略合作在智能工厂建设领域的深化落地。注采工具自动化装配线解决了原有生产方式人工拧紧上扣装配一致性低、物料流转人工搬运劳动强度大等问题。
聊聊byName和byType:上代码:上述省略了默认的set方法,没有截图。可以看到配了address的bean的xml,但是如果autowire的值是default的时候,那么Person类里的address则注入为null。那么修改autowire的值为byName可以看到address注入了,但是List里的泛型是Address也没有注入。这个byName的机制是什么呢?答案是:下图箭头连
前言Spring翻译为中文是“春天”,的确,在某段时间内,它给Java开发人员带来过春天,但是随着我们项目规模的扩大,Spring需要配置的地方就越来越多,夸张点说,“配置两小时,Coding五分钟”。这种纷繁复杂的xml配置随着软件行业一步步地发展,必将逐步退出历史舞台。SpringBoot介绍来自:百度百科SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spri
近年来,在科技自立自强政策的指引下,以统信UOS为代表的国产操作系统得到快速发展,目前已有不少政企部门投入使用。为给更多客户提供便捷的驱动安装体验,统信软件联手兄弟中国,基于统信UOS软硬件生态体系,共同推出联合解决方案。目前,兄弟驱动助手已在统信应用商店上架,欢迎大家前往下载体验。自动匹配,安装更简单为了让统信UOS用户可以更简单便捷地安装兄弟打印产品驱动,无障碍地使用兄弟打印机,兄弟全新升级了
Install (auto-resize) - 安装 (自动调整大小)1.Boot up the iso using a CD/DVD or USB Key to a Live SessionThe
解决办法是:创建虚拟机后不要立即安装,先打开新建虚拟机的setting,然后删除硬件列表中的CD1。
*温馨提示:本人英文能力有限,翻译不当之处还望大家跟帖指正,共同学习、进步!* http://qa.ubuntu.com/getting-involved/automated-tests/ Au
数字经济大潮已然来袭,网信事业进入高速发展阶段。操作系统作为贯通底层硬件和上层应用软件的纽带,处于整个生态产业链的核心位置。麒麟软件作为中国操作系统的核心力量,在数字经济中勇立潮头,绕不开在网信生态建设方面倾注的努力,麒麟自动化适配工具集-KylinAdaptation-Kit1.0,就是为生态新时代而生的强大助力。麒麟自动化适配工具集-KylinAdaptation-Kit1.0是基于长期适配测
为了落实金融信创生态实验室(以下简称“实验室”)“共赢桥、适配库、孵化器”定位,为金融信创工作提供可参考、可复制的指南与示范,实验室形成金融信创解决方案(以下简称“解决方案”)的“征集-甄选-发布-转化”闭环运行机制,并于2021年11月启动解决方案征集工作。自解决方案工作开展以来,受到社会各界持续关注和支持,截至目前,实验室已完成两期解决方案的征集、甄选、发布工作,在此期间,涌现出一批优秀解决方
从性质上说,数字经济是载体而非目的,经济的数字化转型是过程而非终点。数字经济的发展,作为提高和分享生产率的手段,承担着实现在高质量发展中促进共同富裕的目标。只有确立这样的功能定位,全面体现新发展理念,数字经济才能获得持续和健康的发展。相应地,在构建初次分配、再分配、第三次分配协调配套的基础性制度安排中,数字经济既应该也能够做出应有的贡献。数字经济发展并不自动产生成果共享的“涓流效应”,只有在充分融
扫一扫关注公众号
添加我为好友,拉您入交流群!
请使用微信扫一扫!