当前位置: 首页 > news >正文

网站建设 常用字体/爱站权重查询

网站建设 常用字体,爱站权重查询,做游戏网站用什么软件,外贸做网站034:SpringBoot配置解析源码分析1 SpringBoot启动流程总结012 SpringBoot自定义外部扩展文件013 SpringBoot自定义外部扩展文件024 SpringBoot启动流程总结023 SpringBoot启动流程总结036 SpringBoot源码分析课程总结1 SpringBoot启动流程总结01 课题内容&#xff…

034:SpringBoot配置解析源码分析

    • 1 SpringBoot启动流程总结01
    • 2 SpringBoot自定义外部扩展文件01
    • 3 SpringBoot自定义外部扩展文件02
    • 4 SpringBoot启动流程总结02
    • 3 SpringBoot启动流程总结03
    • 6 SpringBoot源码分析课程总结

1 SpringBoot启动流程总结01

课题内容:

  1. SpringBoot源码分析之配置文件解析原理
  2. SpringBoot启动流程整体源码总结
  3. Spring源码总结之Spring体系面试题复习

总结SpringBoot启动流程
核心分为两个步骤;

  1. 创建 SpringApplication对象
  2. 调用SpringApplication run 实现启动,同时返回当前的容器上下文

分析流程:

  1. 创建SpringApplication对象 SpringBoot容器初始化操作;
  2. 获取当前应用启动类型 原理:判断当前classpath是否有加载servlet类,如果有,返回Servlet web启动方式;
    webApplicationType 分为三种类型:
    1.响应式启动 (Spring5新特性)
    2.None 不会嵌入web容器启动 (将SpringBoot项目放入外部服务器运行)
    3.SERVLET 基于Web容器启动
  3. setInitializers 读取SpringBoot包下面的META-INF/spring.factories获取到对应ApplicationContextInitializer 装配到集合中;
  4. setListeners读取SpringBoot包下面的META-INF/spring.factories获取到对应ApplicationListener装配到集合中;
  5. mainApplicationClass 获取当前运行的主函数;
  6. 调用SpringApplication run方法实现启动;
  7. StopWatch stopWatch = new StopWatch(); 记录SpringBoot项目启动时间

2 SpringBoot自定义外部扩展文件01

在这里插入图片描述
自定义加载配置文件
引入依赖

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.0.RELEASE</version>
</parent>
<dependencies><!-- sprinboot web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

相关代码

@RestController
@Configuration
public class IndexController {@Value("${mayikt.name}")private String name;@RequestMapping("/")public String index(){return "SpringBoot源码分析" + name;}
}
public class MySpringApplicationRunListener implements SpringApplicationRunListener {@Overridepublic void starting() {System.out.println(">>>starting");}@Overridepublic void environmentPrepared(ConfigurableEnvironment environment) {// 配置文件读取到程序中 思路需要自己将本地文件读取到容器中,再放入到springboot容器Properties properties = new Properties();try {// 1. 读取我们的my.properties文件properties.load(this.getClass().getClassLoader().getResourceAsStream("my.properties"));// 2. 读取名称名称为myPropertySource propertySource = newPropertiesPropertySource("my", properties);//3. 将资源添加到springboot项目中MutablePropertySources propertySources = environment.getPropertySources();//4.通过该api接口可以将配置文件读取到springboot项目中propertySources.addLast(propertySource);} catch (IOException e) {e.printStackTrace();}}@Overridepublic void contextPrepared(ConfigurableApplicationContext context) {}@Overridepublic void contextLoaded(ConfigurableApplicationContext context) {}@Overridepublic void started(ConfigurableApplicationContext context) {}@Overridepublic void running(ConfigurableApplicationContext context) {}@Overridepublic void failed(ConfigurableApplicationContext context, Throwable exception) {}
}
@SpringBootApplication
public class AppMayikt {public static void main(String[] args) {SpringApplication springApplication = new SpringApplication(AppMayikt.class);springApplication.run(args);}
}

resources目录下文件
META-INF/spring.factories

org.springframework.boot.SpringApplicationRunListener=\
com.mayikt.MySpringApplicationRunListener

my.properties

mayikt.name= mayikt.com

运行结果:
在这里插入图片描述

3 SpringBoot自定义外部扩展文件02

报错原因,反射时没有构造函数,参考原代码增加构造函数。

public class MySpringApplicationRunListener implements SpringApplicationRunListener {private SpringApplication application;private String[] args;public MySpringApplicationRunListener(SpringApplication application, String[] args) {this.application = application;this.args = args;}……
}

测试结果:
在这里插入图片描述

4 SpringBoot启动流程总结02

  1. getRunListeners(args); 读取META-INF/spring.factories 文件中SpringApplicationRunListeners 类型存入到集合中;
  2. listeners.starting(); 循环调用监听器starting方法;
  3. ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments);
    listeners.environmentPrepared(environment);
    读取配置文件到SpringBoot容器中;

读取配置有多种来源:classpath:/,classpath:/config/,file:./,file:./config/
classpath 与file读取有哪些区别?
Classpath 读取编译后的配置文件内容;File读取编译前的配置文件。
默认读取配置文件名称为:application
SpringBoot支持 yml、yaml、xml、properties类型配置文件读取。

3 SpringBoot启动流程总结03

  1. Banner printedBanner = printBanner(environment); 打印SpringBoot Banner;
  2. 创建SpringBoot上下文AnnotationConfigServletWebServerApplicationContext对象(java反射机制初始化);
  3. refreshContext(context); 刷新上下文,会走到spring里面refresh方法;
  4. 开始创建tomcat容器;
  5. 开始加载SpringMVC;
  6. afterRefresh 定义一个空的模版给其他子类实现重写;
  7. listeners.started(context); 使用广播和回调机制通知监听器SpringBoot容器已经启动成功;
  8. listeners.running(context); 使用广播和回调机制通知监听器可以正常运行SpringBoot项目;
  9. 最后返回当前上下文context。
    (原内容由每特教育&蚂蚁课堂余老师编写,稍作修改)

SpringApplication类run方法源码:

public ConfigurableApplicationContext run(String... args) {StopWatch stopWatch = new StopWatch();stopWatch.start();ConfigurableApplicationContext context = null;Collection<SpringBootExceptionReporter> exceptionReporters = new ArrayList<>();configureHeadlessProperty();SpringApplicationRunListeners listeners = getRunListeners(args);listeners.starting();try {ApplicationArguments applicationArguments = new DefaultApplicationArguments(args);ConfigurableEnvironment environment = prepareEnvironment(listeners,applicationArguments);configureIgnoreBeanInfo(environment);Banner printedBanner = printBanner(environment);context = createApplicationContext();exceptionReporters = getSpringFactoriesInstances(SpringBootExceptionReporter.class,new Class[] { ConfigurableApplicationContext.class }, context);prepareContext(context, environment, listeners, applicationArguments,printedBanner);refreshContext(context);afterRefresh(context, applicationArguments);stopWatch.stop();if (this.logStartupInfo) {new StartupInfoLogger(this.mainApplicationClass).logStarted(getApplicationLog(), stopWatch);}listeners.started(context);callRunners(context, applicationArguments);}catch (Throwable ex) {handleRunFailure(context, listeners, exceptionReporters, ex);throw new IllegalStateException(ex);}listeners.running(context);return context;
}

6 SpringBoot源码分析课程总结

Spring体系核心设计模式分析:
Spring中有那些启动方式? 注解和xml
Spring中常用注解有那些:@ComponentScan、@Component、@Configuration、@Baan、@import
SpringBean的生命周期最核心组件:后置处理器
Spring事务底层原理,为什么会失效的呢?Aop技术,不能try
SpringAop中五个通知如何形成调用关联:=责任链模式和递归方法
Spring循环依赖是如何解决的呢?解决循环依赖底层原理什么?三级缓存
SpringMVC 如何去除web.xml运行的? 实现ServletContainerInitializer接口
SpringMVC适配器模式用于在什么地方?Handler多种类型处理
SpringBoot原理是什么?快速整合第三方框架、注解、内嵌tomcat
Springboot启动流程? 创建 SpringApplication对象,run启动
如何手写SpringBoot?三大核心理念+自定义starter+内嵌tomcat+使用Spring注解包装一遍

http://www.jmfq.cn/news/4847977.html

相关文章:

  • 做不锈钢百度网站哪个比较好/最新新闻事件
  • 物联网的网络架构/德兴网站seo
  • 安徽省建设部干部网站/域名归属查询
  • 中山百度网站排名/长尾词挖掘免费工具
  • 一起做玩具网站/企业网站排名优化
  • 阳泉建设局网站/seo运营专员
  • 怎么用html做移动网站/百度权重提升
  • 汉鼎中国 网站建设/西安疫情最新数据消息5分钟前
  • 国家建设网站/营销网络推广方式有哪些
  • 怎样推广广告/山东seo多少钱
  • 保定比较好的网站建设公司/平台软件定制开发
  • 国内很多网站不是响应式/市场调查报告
  • 网站开发建设及推广合同/推广策略有哪些方法
  • 直播app定制开发/成都关键词优化平台
  • 武汉集团网站建设/北京网站推广排名外包
  • wordpress修改固定链接打不开/天津seo培训机构
  • 烟台网络公司员工人数/搜索引擎优化简称
  • 网站案例分析/中山排名推广
  • 网站托管主要干点什么/网络营销是什么工作主要干啥
  • 眉山政府网站建设/北京百度总部电话
  • 购物网站免费模板/拼多多关键词排名查询软件
  • 甘肃省人民政府官网首页/百度seo竞价推广是什么
  • 泸州网站公司/做一个官网要多少钱
  • wordpress 知名站点/网络营销专业学什么课程
  • 中企动力科技股份有限公司干嘛的/宁波seo教学
  • 学习网站建设总结/厦门谷歌seo
  • 顺企网上海网站建设/深圳网络推广服务是什么
  • 小程序开发平台需要网站吗/营销培训总结
  • 企业网站pv是什么/企排排官网
  • 网站优化公司/杭州网站关键词排名