应该有相当一部分程序员是通过Springboot接触WEB开发的,但实际上他已经是一个进化到比较后期的框架了。WEB的大部分的功能都不是由Springboot实现的,它只做了一些简化开发的工作。
对于倒着学框架的感受其实不怎么好,大部分时间都得保持一个“学了再说,会用就行”的态度,一旦你想知道他为什么能这么做,会学的非常痛苦。无奈Java就是一个面向框架编程的语言。
前置知识:基于Servlet的WEB开发、Maven框架、Spring框架、SpringMVC框架
1.什么是Springboot
Springboot是一个简化Spring开发过程的框架。简化了什么呢?简化了Spring开发的配置过程和开发复杂性。
以往的Spring开发,需要自己引入依赖jar包,多个jar包之间经常发生依赖冲突,相信调过Maven依赖冲突的人都懂这有多恶心。Springboot帮你归纳整理好了常见技术栈的所有兼容依赖,并打上版本号。你只需要根据Springboot的版本选择合适的技术就行,无需关心其他。这就是起步依赖。
Spring引入依赖之后,还需要手动的将这些包里的核心Bean注册到IOC容器中,造成大量重复劳动,Springboot也帮你把这个配Bean的过程简化掉了。这叫自动配置。
在引入Bean时往往需要程序员填写大量的配置信息。Springboot秉承着约定大于配置的想法,在自动装配时设置了默认值,这样即使是小白也能开箱即用啦。这叫默认配置。
Spring开发完后,往往需要将jar包放到对应的WEB容器中执行;调试过程也需要额外开启对应服务器的插件(比如你用SpringMVC做开发,调试的时候是要在IDEA里装tomcat插件的)。Springboot通过内置服务器,进一步简化了开发。
1.Springboot的启动过程
- 启动main方法
- 创建SpringApplication对象
- 准备环境
- 创建并刷新应用上下文
- 启动嵌入式WEB服务器
- 发布应用已启动事件
- 执行CommandLineRunner和ApplicationRunner
- 发布ready事件
2.Springboot核心特性
- 自动配置:Springboot会自动扫描依赖的jar包,并将他们的Bean加载到容器里
- 内置WEB服务:Springboot内置了WEB服务器,默认为Tomcat
- 起步依赖:Springboot提供了各种技术的起步依赖(Starter),每个Starter包含一系列需要的依赖,且版本合适,程序员无需关心依赖之间的冲突问题,引入即用
- 支持jar包运行:由于内置了服务器无需将打好的jar包放到专门的服务容器中,直接运行jar包即可启动
- 生态丰富:可以整合各种Spring全家桶的技术,如Actuator健康检查、Spring Security安全模块、Spring Test单元测试
3.Springboot如何实现自动装配
核心注解@EnableAutoConfiguration,会从META-INFO下的spring.factories文件里读取需要加载的配置类,该配置类中包含了各种Bean的注册信息。
4.Spring支持的WEB容器
默认容器Tomcat,此外还支持:
jetty,一个比Tomcat更加轻量级的容器,主要用于嵌入式
Undertow,高性能容器,用于处理高并发
Netty,用于WebFlux,同样适用高并发
5.如何定义和读取配置文件属性
在配置文件application.yml或application.properties中定义相关的属性
在代码中使用注解来读取
- @Value(“${xx.xx}”),加在属性上读取单个配置值,用Spring的EL表达式指定具体加载哪个。所在类需要被Spring容器管理,且属性不能为static
- @ConfigurationProperties(prefix=“xx.xx”),加载配置类上,可以指定配置文件里某个前缀下的所有属性加载到该类的属性中,该类需要提供setter方法
- 使用Environment接口,在类中直接注入Environment对象,调用他的getProperty(“xxx”)
6.Springboot配置文件加载优先级
命令行>外部application-{profile}.properties配置文件>内部application-{profile}.properties>外部application.properties配置文件>内部application.properties配置文件
同级别下,application.properties优先级高于application.yml
7.如何理解Springboot中的Starter
一组有用依赖的集合,用于简化构建配置。开发者只要引用一个Starter,就可以引入所有的依赖和配置,无需手动添加
8.如何实现跨域请求
- 局部跨域配置,在控制器上添加@CrossOrigin()
- 全局跨域配置,同拦截器一样,在WebMvcConfigurer中实现addCorsMappings()方法
9.什么是Springboot的Actuator
是Springboot提供的一个监控和管理功能的工具,他可以实现健康状况监控、查看指标、跟踪请求、管理环境参数等功能
标签:WEB,面试题,依赖,Springboot,Spring,配置,application,理解 From: https://blog.csdn.net/weixin_45957747/article/details/144566157