Springboot+SpringCloud实战课件电子课件_第1页
Springboot+SpringCloud实战课件电子课件_第2页
Springboot+SpringCloud实战课件电子课件_第3页
Springboot+SpringCloud实战课件电子课件_第4页
Springboot+SpringCloud实战课件电子课件_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章深入理解SpringBoot自动装配和启动类学习目标理解SpringBoot项目自动装配过程。理解SpringBoot项目启动过程。通过第2、3章,我们学习了使用SpringBoot进行项目的快速开发、配置、测试和部署等,从中可以发现SpringBoot项目启动和项目配置简单、便捷,它的这些特点离不开其在启动过程中的自动装配。本章,主要介绍SpringBoot项目自动装配过程和它的启动过程,帮助读者深入理解并体会SpringBoot的编程思想。SpringBoot项目自动装配过程12SpringBoot项目启动过程SpringBoot项目自动装配过程SpringBoot的自动装配是“拆箱即用”的基础,也是微服务化的前提。下面通过阅读源码来了解自动装配是如何实现的。我们在编写SpringBoot项目时,启动类上有一个@SpringBootApplication注解。我们查看项目demo的启动类,如程序清单4-1所示。然后,我们按住“Ctrl”键,单击此注解查看它的源码,如程序清单4-2所示,可知此注解位于autoconfigure包下。回顾1.3节,我们可以知道spring-boot-autoconfigure是SpringBoot的核心模块之一,它的作用便是实现SpringBoot的自动装配功能。按住“Ctrl”键并单击包名“org.springframework.boot.autoconfigure”,可查看autoconfigure包,如图4-1所示。通过此包可查看autoconfigure的结构和源码,后续内容提到的META-INF均位于此包。SpringBoot项目自动装配过程SpringBoot项目自动装配过程@SpringBootApplication包含@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan。@ComponentScan默认扫描的是与该类同级的类或同级的包下所有的类。通过源码得知@SpringBootConfiguration是一个@Configuration,它的源码如程序清单4-3所示。SpringBoot项目自动装配过程由此我们可以推断出@SpringBootApplication等同于@Configuration加@ComponentScan加@EnableAutoConfiguration。一旦加上@EnableAutoConfiguration注解,就会开启自动装配功能,SpringBoot会在classpath下找到所有配置的Bean进行装配。当装配Bean时,会根据若干个定制规则来进行初始化。@EnableAutoConfiguration源码如程序清单4-4所示。SpringBoot项目自动装配过程我们留意到它上面的注解@Import导入的类是AutoConfigurationImportSelector,这个类是用于导入自动配置的选择器,通过查看它的源码得知它有一个selectImports方法,如程序清单4-5所示。该方法调用了getAutoConfigurationEntry方法,查看此方法的源码,如程序清单4-6所示。SpringBoot项目自动装配过程SpringBoot项目自动装配过程在getAutoConfigurationEntry方法中,

首先判断是否装配,

然后从META-INF/spring-autoconfigure-perties中读取元数据与元数据的相关属性,接着调用getCandidateConfigurations方法,其源码如程序清单4-7所示。SpringBoot项目自动装配过程getCandidateConfigurations方法中,SpringFactoriesLoader类调用了loadFactoryNames方法,而此方法又调用了loadSpringFactories方法,如程序清单4-8所示。查看loadSpringFactories方法的源码,如程序清单4-9所示,可得知SpringFactoriesLoader会读取META-INF/spring.factories中EnableAutoConfiguration下的自动配置类到容器中。SpringBoot项目自动装配过程SpringBoot项目自动装配过程然后,通过META-INF/spring.factories中的AutoConfigurationImportFilter排除和过滤导入的自动配置类,最后用META-INF/spring.factories中的AutoConfigurationImportListener执行AutoConfigurationImportEvent事件,帮我们进行自动配置工作。进入autoconfigure包,查看META-INF/spring.factories,如图4-2所示。“#AutoConfigure”下是要导入容器的自动配置类。“#AutoConfigurationImportFilters”下是用来排除和过滤导入的自动配置类。“#AutoConfigurationImportListeners”下是用来监听配置类导入的监听器。SpringBoot项目自动装配过程我们以第一个自动配置类SpringApplicationAdminJmxAutoConfiguration为例解释自动配置原理。按住“Ctrl”键并单击该类,可查看它的源码,如程序清单4-10所示。其中,@CondationalOnMissionBean注解的作用是判断是否注入Bean,例如,当我们手动配置了此类的Bean时它便不注入自动配置的Bean,因此它是覆盖自动配置的关键。只要在Maven中导入相关依赖,在spring.factories中将对应的自动配置类注入工厂,SpringBoot就可以取得配置类的属性,从而在YAML或properties中进行设置。SpringBoot项目自动装配过程SpringBoot项目自动装配过程综上所述,我们知道由于SpringBoot的启动类上使用了@SpringBootApplication注解,而该注解包含@EnableAutoConfiguration注解。@EnableAutoConfiguration便是开启自动配置的注解,它导入了@EnableAutoConfigurationImportSelector注解,该注解的内部通过SpringFactoriesLoader.loadSpringFactories读取META-INF/spring.factories文件进行自动配置工作。SpringBoot项目自动装配过程12SpringBoot项目启动过程SpringBoot项目启动过程为了能够直观地查看SpringBoot项目的启动过程,我们采用debug模式。debug模式指调试模式,通过该模式我们可以手动控制程序的执行与暂停,方便查看程序的运行过程。使用debug模式,需要先在demo的启动类中执行run方法的语句上加一个断点,如图4-4所示。然后,我们以debug模式启动,单击蓝色向下箭头,进入run方法的方法体,如图4-5所示。可以看到run方法新建了一个SpringApplication对象,我们可以单击该对象查看它的构造方法,如图4-6所示。这里主要是为SpringApplication对象的属性赋一些初值,如设置资源加载器初始化为空、设置应用上下文初始化器、判断Web应用类型、判断主入口类等。SpringBoot项目启动过程SpringBoot项目启动过程SpringBoot项目启动过程SpringBoot项目启动过程接着,执行SpringApplication对象的run方法,如图4-7和4-8所示。执行步骤如下。SpringBoot项目启动过程SpringBoot项目启动过程①“stopWatch.start();”创建并启动计时监控类,这个类主要记录任务的执行时间。②“this.configureHeadlessProperty();”配置headless属性,headless属性是在缺少显示器

键盘或者鼠标时的系统配置。③“listeners.starting();”创建所有运行监听器并启动。④“newDefaultApplicationArguments(args);”初始化应用参数。⑤“this.prepareEnvironment(listeners,applicationArguments);”根据运行监听器和参数准备SpringBoot环境。⑥“context=this.createApplicationContext();”创建应用上下文。SpringBoot项目启动过程⑦“BannerprintedBanner=this.printBanner(environment);”输出Banner标志。⑧“this.prepareContext(context,environment,listeners,applicationArguments,printedBanner);”准备应用上下文。⑨“this.refreshContext(context);”刷新应用上下文,在这里真正加载Bean到容器中,包括自动装配。如果是Web容器,会在onRefresh方法中创建一个Server并启动。⑩“stopWatch.stop();”

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论