Spring Boot是什么?
1 使用 Spring 项目引导页面可以在几秒构建一个项目
2 方便对外输出各种形式的服务,如 REST API、WebSocket、Web、Streaming、Tasks
3 非常简洁的安全策略集成支持关系数据库和非关系数据库
4 支持运行期内嵌容器,如 Tomcat、Jetty
5 强大的开发包,支持热启动
6 自动管理依赖
7 自带应用监控支持
8 各种 IED,如 IntelliJ IDEA 、NetBeans
Spring Boot有哪些优缺点?
Spring Boot框架的核心思想是什么?
约定优于配置
Spring Boot有哪些核心模块?
Spring Boot的核心配置文件有哪些?
核心配置文件有application和bootstarp配置文件
application文件主要用于Springboot自动化配置文件。
SpringApplication的run方法做了什么
创建一个StopWatch并执行start方法,这个类主要记录任务的执行时间
配置Headless属性,Headless模式是在缺少显示屏、键盘或者鼠标时候的系统配置
在文件META-INF\spring.factories中获取SpringApplicationRunListener接口的实现类EventPublishingRunListener,主要发布SpringApplicationEvent
把输入参数转成DefaultApplicationArguments类
创建Environment并设置比如环境信息,系统熟悉,输入参数和profile信息
打印Banner信息
创建Application的上下文,根据WebApplicationTyp来创建Context类,如果非web项目则创建AnnotationConfigApplicationContext,在构造方法中初始化AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScanner
在文件META-INF\spring.factories中获取SpringBootExceptionReporter接口的实现类FailureAnalyzers
准备application的上下文
初始化ApplicationContextInitializer
执行Initializer的contextPrepared方法,发布ApplicationContextInitializedEvent事件
如果延迟加载,在上下文添加处理器LazyInitializationBeanFactoryPostProcessor
执行加载方法,BeanDefinitionLoader.load方法,主要初始化了AnnotatedGenericBeanDefinition
执行Initializer的contextLoaded方法,发布ApplicationContextInitializedEvent事件
刷新上下文(后文会单独分析refresh方法),在这里真正加载bean到容器中。如果是web容器,会在onRefresh方法中创建一个Server并启动。
刷新上下文
回到run方法,最后的逻辑就是发布启动完成的事件,并调用监听者的方法。
bootstrap 和application配置的区别?
application配置文件的应用场景?
bootstrap配置文件的应用场景?
使用Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
一些固定的不能被覆盖的属性
一些加密/解密的场景
properties 和 .yml yml采取的是缩进的格式 不支持@PeopertySource注解导入配置
Spring Boot的配置文件有哪几种格式?
主要有.properties 和 .yml格式,它们的区别主要是书写格式不同。另外,.yml 格式不支持 @PropertySource 注解导入配置。
Spring Boot的核心注解是哪个?
@SpringBootApplication
SpringBootApplication 注解包含哪几个子注解?
@Target(ElementType.TYPE) :用于描述注解的使用范围
@Retention(RetentionPolicy.RUNTIME) :保留,指定保留时间,三个枚举,分别为source,class,runtime
@Documented:可被javadoc等工具记录,注解类型信息会保存到生成的文档中
@Inherited:个人认为是一个成员变量,父类被子类覆盖之后无法继承,子类中可以继承父类中未被覆盖的父类注解的值
@EnableAutoConfiguration:开启自动配置,包含以下注解
@ComponentScan:开启包扫描,默认扫描同级及当前包下内容
Spring Boot最核心的注解有哪些?
Spring Boot怎么根据指定条件注册bean?
使用注解@ConditionalOnClass和@Bean,可以做到只有特定名称或者类型的Bean存在于BeanFactory时才创建某个Bean
Spring Boot有哪些条件注解?
Spring Boot有哪两种方式集成?
Spring Boot需要独立的容器运行吗?
可以不需要,
内置了 Tomcat/ Jetty 等容器
Spring Boot支持哪几种内嵌容器?
内置tomcat、jetty、undertow 三大web容器
Spring Boot中的默认内嵌容器是?
默认的是tomcat
Spring Boot中的内嵌容器可以替换么?
更换 pmo
Spring Boot自动配置原理是什么?
Spring Boot开启自动配置的注解是?
Spring Boot自动配置的类在哪注册?
Spring Boot自动配置报告怎么查看?
Spring Boot怎么排除某些自动配置?
Spring Boot怎么开启和关闭自动配置?
Spring Boot的目录结构是怎样的?
Spring Boot中的Starters是什么?
Spring Boot Starters有什么命名规范?
Spring Boot Starters官方有哪些分类?
Spring Boot怎么自定义一个Starter?
Spring Boot有哪几种运行方式?
Spring Boot支持哪些应用打包方式?
Spring Boot默认的打包方式是?
Spring Boot应用怎么Debug调试?
Spring Boot可以配置随机端口吗?
Spring Boot怎么打一个可执行Jar包?
Spring Boot怎么运行可执行Jar包?
Spring Boot支持https配置吗?
Spring Boot怎么注册Servlet?
ServletRegistrationBean,
FilterRegistrationBean,
ServletListenerRegistrationBean
三个类分别用来注册 Servlet, Filter, Listener
Spring Boot Runner是什么?
SpringApplication.run调用callRunners方法
查找实现了ApplicationRunner和CommandLineRunner接口的Bean,统一存放在一个list中
根据Bean的order进行排序
循环调用每一个Runner Bean的run接口。
Spring Boot怎么禁用循环依赖?
Spring Boot支持哪些模板引擎?
Spring Boot支持Velocity模板引擎吗?
Spring Boot怎么做单元测试?
Spring Boot支持哪些日志框架?
Spring Boot默认使用哪个日志框架?
Spring Boot有哪几种热部署方式?
Spring Boot配置加载顺序是怎样的?
1.properties文件
2.YAML文件
3.系统环境变量
4.命令行参数
Spring Boot如何定义不同环境配置?
Spring Boot怎么兼容老Spring项目?
可以兼容,使用 @ImportResource 注解导入老 Spring 项目配置文件。
Spring Boot应用有哪些保护手法?
在生产中使用HTTPS
使用Snyk检查依赖关系
升级到最新版本
启用CSRF保护
使用内容安全策略防止XSS攻击
Spring Boot怎么注册事件监听器?
第一:首先定义一个自己使用的监听器类并实现ApplicationListener接口。
第二:通过SpringApplication类中的addListeners方法将自定义的监听器注册进去。
Spring Boot 监听器?
ApplicationFailedEvent
ApplicationPreparedEvent
ApplicationReadyEvent
ApplicationStartedEvent
SpringApplicationEvent
ApplicationEnvironmentPreparedEvent
Spring Boot应用如何监控和健康检查?
Spring Boot怎么解决跨域问题?
可以使用注解@CrossOrigin,也可以通过使用WebMvcConfigurer对象来定义全局CORS配置
Spring Boot 2.X有什么新特性?
需要 Java 8 作为最低版本。许多现有的 API 已经更新,以利用 Java 8 的功能, 例如: 接口上的默认方法, 功能回调和新的 API, 如javax.time如果您当前使用的是 Java 7 或更早版本, 那么在开发 Spring Boot2.0 应用程序之前, 您需要升级 JDK,Spring Boot 2.0 也运行良好, 并且已经过 JDK 9 的测试
Spring Framework 5+
Tomcat 8.5+
Flyway 5+
Hibernate 5.2+
Thymeleaf 3+