目录
#什么是SpringBoot框架?
#SpringBoot的特点(作用)(必会) 简箱版tomcat 优缺点 面试
#SpringBoot运行原理(开箱即用的全过程)//SpringBoot是如何完成自动配置的--面试
##SpringBoot启动项(Starter Project Options)
###什么是 Spring Boot Stater /什么是启动项?——面试
###常见启动项有哪些
###如何实现 Spring Boot 应用程序的安全性?
###starter执行原理?启动器运行原理
#SpringBoot项目写完后打包方式
#运行SpringBoot项目的方式(必会)
#springboot的配置文件(必会)——面试
##有哪些配置文件? 区别
###SpringBoot配置文件的优化---properties文件优化为为yml文件(springboot中yml和properties配置文件有哪些区别--面试)
##yml中配置的内容有哪些 面试 内容
##配置文件的路径有什么要求,除了resources下面,还有呢 面试
##读取配置文件的方式? 面试
#如何使用 Spring Boot 实现分页和排序?
#如何使用 Spring Boot 实现异常处理?/springboot中做过一些异常的拦截吗/谈一下SpringMVC统一异常处理的思想和实现方式(必会)
#异常
异常处理机制--面试
异常的几种类型
异常的处理方式
throw和thows区别
异常处理的时候,finally 代码块的重要性是什么?
try {}里有一个return 语句,那么紧跟在这个try 后的finally {}里的code会不会被执行,什么时候被执行,在return 前还是后?
ss
#什么是SpringBoot框架?面试问了
SpringBoot框架采用了一种更加简化的方式封装了之前的框架,让程序变得更加简单,我们可以理解为是框架的框架
#SpringBoot的特点(作用)(必会) 简箱版tomcat 优缺点 面试问了
1、简化:简化常规框架的配置方式,只需要很少的代码,就可以实现大量的功能。体现了"开箱即用"的思想。
这之后面试官必问SpringBoot开箱即用的原理和规则,见下
1.2、开箱即用:将繁琐的配置封装到jar包中;jar包中的文件已经完成了配置。
只需要少量的配置就可以获取其功能的方式 叫做 “开箱即用”
2、版本锁定:使用了Starter(启动项)管理依赖并对版本进行集中控制
3、内置Tomcat:内置tomcat,无需配置Tomcat就直接可以运行java程序
#SpringBoot运行原理(开箱即用的全过程)//SpringBoot是如何完成自动配置的--面试
主启动类一执行;开始加载主启动类类上的@SpringBootApplication注解,它封装了核心的@SpringBootConfiguration+@EnableAutoConfiguration(意 nei bao Auto) +@ComponentScan(kang pou nent Scan)这三个注解
@SpringBootConfiguration:定义该类是个配置类
@EnableAutoConfiguration:启动自动化配置,当主启动类执行时,则会加载启动项中的配置
@ComponentScan:是这里的@ComponentScan注解括号里 后面并没有指定当前包扫描的路径,默认就是主启动类所在的包路径…
所以我们写代码必须在主启动类的同包及子包中编辑.
##SpringBoot启动项(Starter Project Options)
###什么是 Spring Boot Stater /什么是启动项?——面试
spring-boot-starter-xxxx -boot-starter-这种包就是启动项;
可以通过启动器 集成其他的技术,并提供对应技术的开发和运行环境.
启动项在target-pom.xml文件中
###常见启动项有哪些 web JDBC redis 单元测试 热部署 安全
spring-boot-starter-web, 提供web技术支持
spring-boot-starter-jdbc 传统的 JDBC
spring-boot-starter-redis…redis数据库支持
spring-boot-starter-test 单元测试
spring-boot-devtools这个jar包: 可以热部署 -----面试问了
如何实现 Spring Boot 应用程序的安全性?
为了实现 Spring Boot 的安全性,我们使用 spring-boot-starter-security 依赖 项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展 WebSecurityConfigurerAdapter 并覆盖其方法。
###starter执行原理?启动器运行原理
1)在启动时候会去扫描一个名为spring.factories的jar包
2)然后根据jar包文件中的配置,去加载自动配置类.
//配置文件格式是key=value, value中配置了很多需要Spring加载的类.
3)自动配置类加载后,就会创建这些类的对象放入Spring容器,后期就会从Spring容器中获取这些类对象.
#SpringBoot项目写完后打包方式
可以打包成:
1、jar包文件 适用于工具API/框架源码/SpringBoot程序 最常用的-通过install指令。打包成的jar包文件位置如图所示
注意:有时个别的打包不会在target目录中生成xx.jar(IDEA的问题),可以看控制台下打包完成的路径在本地仓库中查找该jar包,如图
2、war包文件 动态web开发时常用的方式,可以直接tomcat服务器部署.(落后,只有银行/金融保险这些公司可能在用)
3、pom类型 表示该项目是一个 “聚合工程”, 一个大项目里边包含了多个小项目的结构.许多小项目都有各自的域名,都有各自的一台服务器
#运行SpringBoot项目的方式(必会)
1、直接运行main方法
2、可以使用Maven插件直接运行
3、可以打包后运行
#springboot的配置文件(必会)——面试
##有哪些配置文件? 区别
bootstrap.yml
application.yml
bootstrap由父ApplicationContext加载, 优先于application配置文件加载.
bootstarp 可用于加载固定的不能被覆盖的属性 和 一些加密/解密的数据.
application: 用于springboot项目中的自动化配置.
bootstrap:
使用spring cloud config配置中心时, 需要加载连接配置中心的配置属性的, 就可以使用bootstrap来完成.
加载不能被覆盖的属性.
加载一些加密/解密的数据.
###SpringBoot配置文件的优化---properties文件优化为为yml文件(springboot中yml和properties配置文件有哪些区别--面试)
1、application.properties文件——其中都是K-V结构,如果要写好多前面几项一样仅后面一项不同的配置,就要写好多次前面的,然后后面只改最后一项,很麻烦
SpringBoot项目中有多个配置文件.如果大量的重复的配置项都写到其中properties文件,则用户体验不好.
所以需要优化,则可以修改优化为yml文件
##yml中配置的内容有哪些 面试 内容
配置端口号
server:
port:8080
配置Spring数据源
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/vcd?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username: root
password: 123456
整合Mybatis-plus
mybatis-plus:
#定义别名包
type-aliases-package: com.jt.pojo
#将所有的映射文件全部加载
mapper-locations: classpath:/mappers/*.xml
#开启驼峰映射
configuration:
map-underscore-to-camel-case: true
# 一二级缓存默认开始 所以可以简化
打印mapper层下的Sql日志
logging:
level:
com.jt.mapper: debug
和一些其他的配置
##配置文件的路径有什么要求,除了resources下面,还有呢 面试
##读取(yml)配置文件的方式? 面试
1、读取默认配置文件
需要注入Environment类, 使用environment.getProperty(peorperties中的key), 这样就能获得key对应的value值
@value(${key.value}) 直接读取
2、读取自定义配置文件 见此处
自定义配置文件后缀必须是.propeties
编写和自定义配置文件对应的类, 类上加
@PropertySource注解指定配置文件路径和编码方式
读取的时候也是 @value(${key.value}) 直接读取
#如何使用 Spring Boot 实现分页和排序?
使用 Spring Data-JPA 可以实现将可分页org.springframework.data.domain.Pageable 的 传递给存储库方法
#如何使用 Spring Boot 实现异常处理?/springboot中做过一些异常的拦截吗/谈一下SpringMVC统一异常处理的思想和实现方式(必会) 点此处
使用SpringMVC之后,代码的调用者是SpringMVC框架,也就是说最终的异常会抛到框架中,然后由框架指定异常处理类进行统一处理
方式一: 创建一个自定义异常处理器(实现HandlerExceptionResolver接口),将这个类交给Spring容器管理并实现里面的异常处理方法
方式二:全局异常拦截
@RestControllerAdvice 和 @ExceptionHandler 配合完成统一异常拦截处理.通过value属性指定可以处理的异常类型
自定义异常处理器https://blog.csdn.net/fhefhffg/article/details/123084644#t23
#异常
异常处理机制--面试
当程序违反了的语义规则时,编译器就会将发生的错误标识为一个异常。
违反语义规则包括2 种情况。一种是JAVA 类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null 的对象时会引发NullPointerException。
另一种情况就是JAVA 允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw 关键字抛出异常。
异常的几种类型
异常的顶级父类是Throwable
常见的异常种类
1、Error异常,我们编程无法解决的问题 栈存虚死
常见的有 StackOverFlowError 栈溢出异常
OutOfMemoryError 内存溢出异常
VirtulMachineErrorJava 虚拟机运行异常
ThreadDeath 线程死锁异常
2、Exception异常,我们可以编码修复的错误
常见的有1)RunTimeException 运行时异常 越类算空格输
其子类异常:
ArrayIndexOutOfBoundsException - 数组下标越界异常
ClassCastException - 类型强制转换异常
ArithmeticException: / by zero算术异常,除数不能为0,数学规定
NullPointerException - 空指针异常
NumberFormatException - 数字格式异常
InputMismatchException:输入不匹配异常
运行时异常的特点是Java编译器不会检查它,即使没有用try-catch语句捕获它,也没有用throws抛出它,也会编译通过。
2)非运行时异常(编译异常),
如IO Exception、SQL Exception等以及用户自定义的Exception异常,
非运行时异常的特点是必须进行处理的异常,如果不处理,就不能编译通过
异常的处理方式
throw和thows区别 位用
throw和thows区别
throw
位置:用在方法的内部,其后跟着的是异常对象的名字
作用:用来在程序中明确的抛出异常,由方法体内的语句处理
执行throw一定抛出了某种异常
throws
位置:用在方法定义处,其后跟着的是异常类的名字
作用:用来表明方法不能处理,需要由本方法的调用者来处理这些异常
的异常
这只是一种可能性,异常不一定会发生
异常处理的时候,finally 代码块的重要性是什么?
1、无论是否抛出异常,finally 代码块总是会被执行。
就算是没有 catch 语句同时又抛出异常的情况下,finally 代码块仍然会被执行。
2、作用:finally 代码块主要用来释放资源,比如:I/O 缓冲区,数据库连接
try {}里有一个return 语句,那么紧跟在这个try 后的finally {}里的code会不会被执行,什么时候被执行,在return 前还是后?
会执行,在return 前执行。
ss
1、主启动类上的:
1)@SpringBootApplication:它封装了核心的@SpringBootConfiguration+@EnableAutoConfiguration +@ComponentScan这三个注解
2)@MapperScan:通过指定路径可以将mapper层下的接口交给全部交给容器管理
2、层级代码结构上的
1)控制层上的
@RestController 是@Controller 和@ResponseBody的结合,一个类被加上@RestController注解,数据接口中就不再需要添@ResponseBody,
@RequestMapping,一个类中都需要明确请求的路径.具体有@GetMappping,@PostMapping,@PutMapping@DeleteMapping
2)业务层上的
@Service将service层交给容器管理
3、测试类上的:@SpringBootTest注解标识为SpringBoot测试类 测试类的包路径,必须在主启动类的同包及子包中编辑.
4、全局异常拦截
@ControllerAdvice 和 @ExceptionHandler 配合完成统一异常拦截处理.