SpringBoot应用(三)---细节整理

本文介绍了SpringBoot的启动流程,包括如何加载配置文件、初始化上下文等关键步骤。同时探讨了SpringBoot支持的扩展点如ApplicationInitializer、commandLineRunner等的作用及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

springboot扩展点:
·ApplicationInitializer是在spring执行refresh之前的回调   
1.context.add 2.配置项context.initializer.classes 3.spring.factories配置,用于jar包中的配置起作用


·commandLineRunner(与applicationRunner的区别在于applicationRunner的参数经过springboot封装)是在容器启动成功后最后一步回调  @Order可以指定执行顺序,先执行order值较小的




·applicationArguments获取程序参数,可以解析--name value与--name value




·classpath下添加banner.txt可以指定spring输出图标,app.setBannerMode可以关闭spring输出banner,或控制banner输出位置,banner.location指定banner.txt文件路径,banner.charset指定banner编码默认UTF-8
spring的banner支持图片的输出,支持png,jpg,gif格式 banner.img.location指定文件位置(全文件名),默认banner.[jpg|png|gif]




·EL表达式指定默认值${name:defalutValue}


springboot启动流程:
1.判断是否是web环境
2.加载所有classpath下面的META-INF/spring.factories ApplicationContextInitializer
3.加载所有classpath下面的META-INF/spring.factories ApplicationListener
4.推断main方法所在的类
5.开始执行run方法
6.设置java.awt.headless系统变量
7.加载所有classpath下面的META-INF/spring.factories SpringApplicationRunListener
8.执行所有的SpringApplicationRunListener的started方法
9.实例化ApplicationArguments对象
10.创建environment
11.配置environment,主要是把run方法的参数配置到environment中
12.执行所有的SpringApplicationRunListener的environmentPrepared方法
13.如果不是web环境,但是是web的environment,则把这个web的environment转换为标准的environment
14.打印banner
15.初始化applicationContext,如果是web环境,则实例化AnnotationConfigEmbeddedWebApplicationContext对象,否则实例化AnnotationConfigApplicationContext对象非
16.如果beanNameGenerator不为空,就把beanNameGenerator对象注入到context里面去
17.回调所有的SpringApplicationContextInitializer方法
18.执行所有的SpringApplicationRunListener的contextPrepared方法
19.一次网spring容器中注入:ApplicationArguments,Banner实例
20.加载所有的源到context里面去
21.执行所有的SpringApplicationRunListener的contextLoaded方法
22.执行context的refresh方法,并且调用context的registerShutdownHook方法
23.回调,获取容器中所有的ApplicationRunner、CommandLineRunner接口,然后排序,依次调用
24.执行所有的SpringApplicationRunListener的finished方法






spring.mvc.view.prefix=/web-inf/jsp/
spring.mvc.view.suffix=.jsp


springboot默认不支持jsp,需要添加Tomcat-embed-japser的jar包












代理模式为什么既要继承被代理的对象所属的类,
又要有一个被代理的实例的引用呢?
继承是为了满足java编程的原则,若不继承则原有代码使用instanceof的地方就会出错,
实例的引用是aop的需要。


project.build.sourceEncoding UTF-8
maven.compiler.source 1.8
maven.compiler.target 1.8

 

 

 

 * 获取配置文件的两种方法:
 * 默认的配置文件名为application.properties
 * 默认的位置为编译路径(classpath)下
 * 默认的文件名可以用--spring.config.name来指定,只是指定名字(不能带文件扩展名)--spring.config.name=myconf 
 * 指定带路径的配置文件可以使用--spring.config.location=conf/myconf/myconfig.properties
 * 多个配置文件用逗号隔开,同一个配置后面的覆盖前面的:--spring.config.location=classpath:/myconf.properties,conf/myconf/myconfig.properties
 * 程序参数配置优先于@PropertySource注解
 * 注解@PropertySource可以连续配置多个,同一配置后面的覆盖前面的,优先使用application.properties的配置
 * 使用注解@PropertySources也可指定多个
 * 支持注入数组、list,在properties文件中使用name[index]=value的格式即可
 * --spring.profiles.active=dep可以用来指定激活哪一套配置文件,与哪一套bean被spring管理,可以指定多个值,用逗号分隔
 *

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值