重学| 面试复习(三)Spring Boot

Spring Boot 怎么开发一个自己的Stater

1.引入maven依赖spring-boot-autoconfigure
2.编写javaBean @EnableConfigurationProperties(SimpleBean.class) @ConfigurationProperties(prefix = “simplebean”)
3.编写配置类@Configuration@ConditionalOnClass(当类路径classpath下有指定的类的情况下进行自动配置)
4.resources下创建META-INF/spring.factories,在该文件中加上自己定义的配置类

参考pdf/p29

Spring Boot 如何实现的自动装配

1.springboot应用启动;
2.@SpringBootApplication起作用,@SpringBootApplication是一个组合注解包含@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan三个核心注解;
3.@EnableAutoConfiguration包含@AutoConfigurationPackage这个注解主要就是实现的自动装配;
4.@AutoConfigurationPackage:这个组合注解主要是@Import(AutoConfigurationPackages.Registrar.class),它通过将Registrar类导入到容器中,而Registrar类作用是扫描主配置类同级目录以及子包,并将相应的组件导入到springboot创建管理的容器中; 5.@Import(AutoConfigurationImportSelector.class):它通过将AutoConfigurationImportSelector类导入到容器中,AutoConfigurationImportSelector类作用是通过selectImports方法执行的过程中,会使用内部工具类SpringFactoriesLoader,查找classpath上所有jar包中的META-INF/spring.factories进行加载,实现将配置类信息交给SpringFactory加载器进行一系列的容器创建过程

参考pdf/p19

Spring boot的执行原理

第一步:获取并启动监听器
this. getRunListeners (args )和listeners . starting( )方法主要用于获取Spr ingAppl ication实例初始化过程中初始化的Spr ingAppl icationRunListener监听器并运行。
第二步:根据SpringApplicationRunL isteners以及参数来准备环境
this. prepareEnvi ronment (listeners, applicat ionArguments)方法主要用于对项目运行环境进行预设置,同时通过this. configureI gnoreBeanInfo (envi ronment)方法排除一些不需 要的运行环境
第三步:创建Spring容器
根据webApplicat ionType进行判断,确定容器类型, 如果该类型为SERVLET类型,会通过反射装载对应的字节码,也就是AnnotationConfigServletwebserverAppl icationContext,接着使用之前初始化设置的context (应用上下文环境)、envi ronment (项目运行环境)、listeners (运行监听器)、applicationArguments (项目参数)和printedBanner (项目图标信息)进行应用上下文的组装配置,并刷新配置
第四步: Spring容器前置处理
这一一步主要是在容器刷新之前的准备动作。设置容器环境,包括各种变量等等,其中包含一一个非常关键的操作:将启动类注入容器,为后续开启自动化配置奠定基础
第五步:刷新容器
开启刷新spr ing容器,通过re fresh方法对整个IOC容器的初始化(包括bean资源的定位,解析,注册等等),同时向JVM运行时注册一一个关机钩子,在JVM关机时会关闭这个上下文,除非当时它已经关闭
第六步: Spring容器后置处理
扩展接口,设计模式中的模板方法,默认为空实现。如果有自定义需求,可以重写该方法。比如打印一些启动结束log,或者一-些其它后置处理。
第七步:发出结束执行的事件
获取EventPublishingRunListener监听器,并执行其started方法,并且将创建的Spr ing容器传进去了,创建一一个Applicat ionStartedEvent事件,并执行ConfigurableAppl icat ionContext的publishEvent方法,也就是说这里是在Spr ing容器中发布事件,并不是在Spr ingAppl ication中发布事件,和前面的starting是不同的,前面的start ing是直接向SpringAppl ication中的监听器发布启动事件。
第八步:执行Runners
用于调用项目中自定义的执行器xxRunner类,使得在项目启动完成后立即执行- -些特定程序。其中,Spr ing Boot提 供的执行器接口有Appl icationRunner和CommandLi neRunner两种,在使用时只需要自定义一个执行器类实现其中一一个接口并重写对应的run( )方法接口,然后Spring Boot项目启动后会立即执行这些特定程序

参考PDF/p38

Spring和SpringBoot有什么区别和联系

Spring都知道,Spring 框架为开发Java应用程序提供了全面的基础架构支持。它包含一些很好的功能,如依赖注入和开箱即用的模块。
Spring Boot是所有基于Spring开发的项目的起点。Spring Boot的设计是为了让你尽可能快的跑起来Spring应用程序并且尽可能减少你的配置文件。基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期

spring boot 核心配置文件是什么?bootstrap.properties 和 application.properties 有何区别

bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加载的,比 applicaton 优先加载,配置在应用程序上下文的引导阶段生效。一般来说我们在 Spring Cloud Config 或者 Nacos 中会用到它。且 boostrap 里面的属性不能被覆盖;
application (. yml 或者 . properties): 由ApplicatonContext 加载,用于 spring boot 项目的自动化配置。

Spring Boot 配置加载顺序

1.properties文件;
2.YAML文件;
3.系统环境变量;
4.命令行参数;

为什么导入dependency时不需要指定版本?

在Spring Boot入门程序中,项目pom.xml文件有两个核心依赖,分别是spring-boot-starter-parent和spring-boot-starter-web,进入并查看spring-boot-starter-parent底层源文件,发现spring-boot-starter-parent的底层有一个父依赖spring-boot-dependencies,该文件通过标签对一些常用技术框架的依赖文件进行了统一版本号管理,例如activemq、spring、tomcat等,都有与Spring Boot 版本相匹配的版本,这也是pom.xml引入依赖文件不需要标注依赖文件版本号的原因。
需要说明的是,如果pom.xml引入的依赖文件不是spring-boot-starter-parent管理的,那么在pom.xml引入依赖文件时,需要使用标签指定依赖文件的版本号。

spring-boot-starter-parent父依赖启动器的主要作用是进行版本统一管理,那么项目运行依赖的JAR包是从何而来的?

查看spring-boot-starter-web依赖文件源码,可以发现,spring-boot-starter-web依赖启动器的主要作用是提供Web开发场景所需的底层所有依赖,正是如此,在pom.xml中引入spring-boot-starter-web依赖启动器时,就可以实现Web场景开发,而不需要额外导入Tomcat服务器以及其他Web依赖文件等。当然,这些引入的依赖文件的版本号还是由spring-boot-starter-parent父依赖进行的统一管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值