什么是Spring Boot?
Spring boot是一个简化版的spring项目。
为什么要用springboot?
通过默认值快速开发,减少开发周期。使用javaconfig有助于避免使用xml配置避免大量的maven导入和各种版本冲突。需要更少的配置,因为没有web.xml文件,只需要添加@Configuration注解的类,然后添加@Bean注解的方法,spring将自动加载对象到spring容器中。springboot的核心注解是哪个?它由哪几个注解组成?
启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下
3 个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration(
@AutoConfigurationPackage @Import(AutoConfigurationImportSelector.class)组成):打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描
运行springboot的几种方式?
(1)打包命令 java -jar。
(2)用Maven插件运行。
(3)直接执行main方法。
如何理解springboot中的starters?
Springboot需要独立的容器运行吗?
可以不需要,springboot内置了Tomcat等容器。
Springboot中的监视器是什么?
Spring boot actuator是spring启动框架中的重要功能之一。Spring boot监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。
如何使用springboot实现异常处理?
https://www.cnblogs.com/lenve/p/10748453.html
@ControllerAdvice注解。这个注解是一个增强的Controller,可以实现三个方面的功能。
1.全局异常处理。
@ControllerAdvice和@ExceptionHandler配合使用
2.全局数据绑定。
@ControllerAdvice和@ModelAttribute配合使用
3.全局数据预处理。
@ControllerAdvice和@InitBinder配合使用
springBoot实现热部署有哪几种方式?
引入Spring-boot-devtools依赖,在application.properties中配置devtools
Springboot配置加载顺序?
Springboot的核心配置文件有哪几个?他们有什么区别?
什么是javaConfig?
JavaConfig提供了配置spring Ioc容器的纯java方法,避免了使用xml配置。
1.面向对象的配置。由于配置被定义为 JavaConfig 中的类,因此用户可以充分利用 Java 中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean 方法等。
2.减少或消除 XML 配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在 XML 和 Java 之间来回切换。
JavaConfig 为开发人员提供了一种纯 Java 方法来配置与 XML 配置概念相似的 Spring 容器。从技术角度来讲,只使用 JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将JavaConfig 与 XML 混合匹配是理想的。
类型安全和重构友好。JavaConfig 提供了一种类型安全的方法来配置 Spring容器。由于 Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。
如何在SpringBoot中禁用Actuator端点安全性?
默认情况下,所有敏感的 HTTP 端点都是安全的,只有具有 ACTUATOR 角色的用户才能访问它们。安全性是使用标准的 HttpServletRequest.isUserInRole 方法实施的。 我们可以使用来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。
如何在自定义端口上运行springboot应用程序?
Server.port=8090
什么是spring profiles?
Spring Profiles 允许用户根据配置文件(dev,test,prod 等)来注册 bean。因此,当应用程序在开发中运行时,只有某些 bean 可以加载,而在 PRODUCTION中,某些其他 bean 可以加载。
SpringBoot的配置文件有哪几种格式?他们有什么区别?
.properties和.yml,他们的区别主要是书写方式不同。
@Import注解?
https://www.cnblogs.com/yichunguo/p/12122598.html
快速导入的方式将实例加入到spring Ioc容器中。
@Import的三种用法。
SpringBoot启动过程源码分析
springApplication初始化模块SpringApplication.run()方法时,首先要创建一个SpringApplication对象实例,然后调用这个实例对象的run方法。
SpringApplication实例初始化的时候,会做几件事情:
配置source判断是否为web环境创建初始化构造器,调用getSpringFactoriesinstance方法,通过自动化配置模块,获取初始化构造器所需工厂实例的集合。使用springFactoriesLoder在应用的classpath的MATA-INF/spring.factories查找并加载所有可用的ApplicationContextInitializer。创建应用监听器,调用getSpringFactoriesinstance方法,通过自动化配置模块,获取应用监听器所需工厂实例的集合。使用SpringFactoriesLoader(SpringFactoriesLoader.loadFactoryname)在应用的calsspath的MATA-INF/spring.factories查找并加载所有可用的ApplicationListener。配置应用的主方法所在类。 自动化配置模块获取传入的类对象,即可获取类加载器,然后使用springfactoriesLoader可以在应用的classpath的MATA-INF/spring.factories找到该类的全限定名对应的值,即可得到与该类(相当于及一个接口)相关的所有工厂类的全限定名(具体实现),然后通过classUtils.forname(name,classloader)可以得到类对象,然后利用反射机制就能够生成工厂类的实例,然后返回工厂类实例集合。
SpringApplication.run启动模块 SpringApplication实例初始化后调用run方法来启动,首先遍历执行所有通过springfactoriesLoader查找并加载的springApplicationRunListener,然后调用started()方法开始监听。创建并配置当前SpringBoot应用将要使用的Environment遍历调用所有SpringApplicationRunListener的environmentPrepared()方法如果springApplication的showbanner属性为true,则打印banner。创建applicationcontext,将之前准备好的environment设置给创建好的applicationcontext使用。通过springfactoriesloader查找并加载classpath中所有可用的applicationcontextInitializer(初始化模块时已经完成),然后遍历调用这些ApplicationContextInitializer的initialize(applicationContext)方法对已经创建好的applicationcontext近一步处理。遍历调用所有SpringApplicationRunListener的contextPrepared()方法最核心的一步,通过@EnableAutoConfiguration获取所有配置以及其他形式的ioc容器配置加载到applicationcontext遍历调用springapplicationrunlistener的contextloaded()方法调用applicationcontext的refresh()方法,完成ioc容器的最后一道工序。查找当前applicationcontext中是否注册有commandlineRunner,如果有,则遍历执行他们。遍历执行springapplicationRunListener的finished()方法SPI机制(Service Provider Interface)(dubbo,远程过程调用框架使用到了,JDBC也使用到了)
spi机制是jdk内置的服务发现机制,即给定一个接口类对象,他会通过ServiceLoader.load方法到classpath的META-INF/services文件夹下查找对应接口类名的文件,然后获取到文件中定义的实现类全限定名,然后通过Class.forName获得对应的class对象,利用反射机制来创建实现类实例,最终返回一个迭代器,利用迭代器就能够获得所有的实现类实例。
SpringBoot的自动化加载模块就是利用类似SPI机制来实现的。
Springboot自定义spring mvc配置
继承WebmvcConfigurerAdapter抽象类实现WebMvcConfigurer接口