什么是SpringBoot?
SpringBoot是一个全新的Spring框架,其设计目的就是用来简化新Spirng应用的初始化搭建以及开发过程。该框架使用了特定的方式来进行配置,从而是程序员不再需要定义样板华的配置。
优点:
- 约定大于配置
- 创建独立的Spring应用程序
- 开发简单,集中式管理
- 基本不会重复
- 功能都在本地,没有分布式的管理和调用消耗
- 内嵌服务器,不用部署WAR文件
- 允许通过Maven来根据需要获取starter
- 完全没有代码生成,对XML没有要求配置
- 尽可能的使用自动配置Spring
缺点:
- 效率低:开发都在同一个项目改代码,相互等待,冲突不断
- 维护难:代码功能耦合在同一个项目
- 不灵活
- 稳定性差
理解: 1.约定大于配置
2.Spring Boot 不是对 Spring 功能上的增强,而是提供了一个快速使用Spring 的方式
3.开箱即用,没有代码的生成,也无需XML配置,提供大项目中常见的非功能特性。
特点: 1)为基于Spring的开发提供更快的入门体验;
2)开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求;
3)提供了一些大型项目常见的非功能性特性,如嵌入式服务器、安全、指标、健康检测、外部配置等;
4)SpringBoot 不是对 Spring 功能上的增强,而是提供了一种快速使用的 Spring 的方式
SpringBoot的核心功能:
- 起步依赖(简化依赖配置)
起步依赖本质上是一个Maven项目对象模型(Project Object Model, POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。 - 自动配置(简化常用工程相关配置)
SpringBoot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不应该用哪个。该过程是Spring自动完成的。 - 辅助功能(内置服务器,.......)
SpringBoot程序还有其他的一些优势,比如没有配置Tomcat服务器,但是能正常运行,这是SpringBoot入门程序中一个可以感知到的功能,也是SpringBoot对的辅助功能之一。
什么是starter?
SpringBoot为了简化配置,提供了很多的starter,starter是SpringBoot事先打包好常用模块的jar包,并完成自动装配,就是叫starter。使用starter可以帮助开发者减少依赖配置。
starter和parent的区别?
都是帮助我们简化配置。
starter是一个坐标中定了若干个坐标,以前要写多个,现在只要写一个,是用来减少依赖配置的书写量。
parent是定义了几百个依赖版本号,以前是要自己手工控制版本,现在由SpringBoot统一管理,这样就不会产生冲突了,是用来减少依赖冲突的。
@SpringBootApplication应用程序启动类的作用?
@SpringBootApplication注解是一个复合注解,它结合多个其他Spring框架中的注解,以简化SpringBoot应用的配置,这个注解主要是用于SpringBoot应用的主类上,以快速启动并配置应用。
@SpringBootApplication是@SpringBootConfiguration、@EnableAutoConfiguation和@ComponentScan这三个注解的组合体。
@SpringBootConfiguration:和@Configration注解一样,是用来声明这是一个配置类。
@ComponentScan:组件扫描,默认扫描当前引导类所在包和子包。
@EnableAutoConfiguration:SpringBoot实现自动化配置的核心注解。
@SpringBootApplication则是用于从main方法启动Spring应用的类,它会执行以下步骤:
- 推断应用的类型是普通项目还是Web项目
- 查找并加载所有可用初始化器,设置到initalizers属性中
- 找出所有的应用程序监听器,设置listener属性中
- 推断并设置main方法的定义类,找到运行的主类
SpringBoot 有那些核心注解?
核心注解:@SpringApplication
自动配置注解:@EnableAutoConfiguration、@Configuration
组件扫描和注解注入:@CompnentScan、@Compnent、@Controller、@Service、@Repository、@RestController
数据绑定和验证注解:@RequestMapping、@GetMapping、@PostMapping、@ResponesBody、@RequestBody
自动装配(根据类型,根据名称):@AutoWired、@QualiFier、@Resource
SpringBoot配置文件类型有几种?区别是什么?
properties和yml和yaml
区别:主要是properties和yml书写方式不一样,yml和yaml是一样的格式,所以一般使用的是yml,yml数据表达更直观,但是properties优先级大于yml
过滤器和拦截器的区别?
过滤器是依赖于Servlet容器,拦截器是依赖于Spring
- 触发时机不同,过滤器是请求加入容器之后,进入Servlet之前进行预处理。
- 过滤器可以修改request,拦截器不行
- 拦截器可以调用IOC容器里的各种依赖,过滤器不行
- 过滤器只在请求前后执行,拦截器详细于所有方法。
- 过滤器是基于函数回调,而拦截器是基于java反射。
- 拦截器可以访问处理方法的上下文,而过滤器不行
- 过滤器可以对所有的请求起作用,而拦截器只能对Spring请求起作用
SpringBoot拦截器的创建?
- 创建拦截器类并实现HandlerInterceptor接口
- 再进行配置
SpringBoot过滤器的注册方式?
有两种注册方式。
第一种是利用Servlet3.0的@WebFilter注解配置:@WebFilter是Servlet3.0新增加的注解,当项目启动时,会自动扫描自动注册。
但是这个注解并不是由SpringBoot提供的,所以我们得在配置类还得加一个注解:@ServletComponetScan,指定扫描的Filter包。
第二种是利用SpringBoot配置类来添加过滤器:把Filter类写好了,不需要加@WebFilter注解,使用SpringBoot提供的FilterRegistrationBean来对Filter进行配置。
SpringBoot的如何定义全局异常处理器?
- 定义全局异常处理器类
- 在此类上添加@ControllerAdvice注解
- 根据异常类型来指定响应的处理器方法
- 在方法上通过异常类型来执行执行的处理器方法@ExceptionHandler
- 根据不同的异常类型做出处理器相应的响应信息