Springboot自动配置原理?
自动配置的注解@EnableAutoConfiguration
通过这个注解可以引入自动配置jar包下面的配置类信息
SpringApplication.run : 启动SpringBoot应用
主程序的注解
@SpringBootApplication:包括三个标签组成
@EnableAutoConfiguration : 开启自动配置功能
@SpringBootConfiguration - @Configuration : Spring的配置标签
@ComponentScan :组件自动扫描
dependencyManagement:该标签下的jar包,默认是不能被子项目直接使用的 , 他只有声明的功能 , 如果只项目想用这里标签里面的jar包 ,需要显示的写出来 ,而版本号使用父工程的。达到版本号统一管理的效果
dependencies:这个标签下面的jar包默认会被子项目直接继承使用
Spring MVC运行原理?
运行原理(客户端发出请求——过滤器——SpringMVC的前端控制器DispatcherServlet——拦截器preHandle方法——映射器——控制器——拦截器postHandle——拦截器afterCompletion——过滤器)
类型转换、拦截器、数据绑定、异常处理
JavaWeb三大组件(Servlet、Filter、Listener)
Servlet,Listener,Filter
Servlet是用来处理客户端请求的动态资源,也就是当我们在浏览器中键入一个地址回车跳转后,请求就会被发送到对应的Servlet上进行处理。
filter与servlet在很多的方面极其相似,但是也有不同,例如filter和servlet一样都又三个生命周期方法,同时他们在web.xml中的配置文件也是差不多的、 但是servlet主要负责处理请求,而filter主要负责拦截请求,和放行。
springIoC(控制反转)
将对象的创建交给Spring来控制,通过反射和注解[也有xml配置的方式]
控制权有调用者转移到Spring容器,控制权发生了反转。
以前jsp时,对象便我们自己创建的,它是什么管理,什么时候销毁
servlet什么时候销毁
第一次请求时启动,Tomcat关闭时销毁
private UserService userService=new UserServiceImpl() (多次请求会出现多例)
后面使用spring的自动注入,spring bean对象(单例),这时是由我们spring Ioc容器来管理这个对象
AOP是什么?怎么用?应用场景有哪些?
(面向切面编程,切入点 主要应用方法功能增强[日志,权限、性能监控等等)
同时还要深入理解面向对象编程,面向接口编程。Java的特性
从方法等层面切入编程,一般用注解实现,应用场景:日志、权限、监控、swagger 2接口文档
什么是事务?
事务是一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败。
事务回滚:出现异常
事务特性(ACID):
原子性 :强调事务的不可分割.(针对操作)
一致性 :事务的执行的前后数据的完整性保持一致.(针对数据)
隔离性 :一个事务执行的过程中,不应该受到其他事务的干扰
持久性 :事务一旦结束,数据就持久到数据库
mybatis和mybatis Plus 关系或者区别?
增强
mybatis-plus是mybatis的基础上做了增强,只做增强,不做修改【注意jar包不一样,不要乱引用,如果你application.yml中配置 mybatis-plus,那你必须引用的是mybatis-plus的jar,否则连mybatis都没有】
根据id查询好,有索引和id是唯一性
Spring Boot中的yaml的基本语法与配置
1. yaml概念:可读性高,用来表达数据序列化的格式,后缀:.yml(或者yaml)
如果application.yml、application.yaml、application.properties并行存在,优先级是后加载的,替换先加载的。
一般配置文件都是application-*.yml,有时有多个环境,比如有开发环境application-dev.yml、测试环境、生产环境
2. 基本语法:
- 大小写敏感(key:value,key名没关系具体看框架和使用场景)
- 使用缩进表示层级关系
- 缩进不允许使用tab,只允许空格
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
- '#'表示注释
写法 : K: (空格)V , 表示一对键值对,空格是必须的
支持的值:
- 字面量:普通的值,数字、字符串、布尔
name: admin
- 对象: 属性和值
# 注释,普通写法
User:
lastName: tian
age: 20
# 行内写法,一行解决
User: {lastName: tian, age: 20}
- map: 键值对
#普通写法
name: tian
age: 12
- 数组: list set
#普通写法
person:
- student
- boss
- teacher
#行内写法
person:[student, boss, teacher]
3. Spring Boot 的yml文件配置
(1)配置服务器端口号
# 服务器端口
server:
port: 81
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
愿景:成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。
logback日志配置
日志用途:记录项目运行的问题
选择一个好的日志框架?
市面上的日志框架:JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j…
左边选一个门面(抽象层)、右边来选一个实现;
日志门面: SLF4J;
日志实现:Logback;
SpringBoot:底层是Spring框架,Spring框架默认是用JCL;
SpringBoot选用 SLF4j和logback;
(1)Springboot默认使用的日志框架是Logback, spring-boot-starter依赖包含了 spring-boot-starter-logging。
(2)日志输出级别(程序运行输出的信息级别,从严重错误到详细输出信息的分级)
从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL
日志输出级别
ERROR 为严重错误 主要是程序的错误
WARN 为一般警告,比如session丢失
INFO 为一般要显示的信息,比如登录登出
DEBUG 为程序的调试信息
TRACE 级别最小,打印信息最为详细
设置日志级别越低,打印的信息越详细,能够将日志级别高的打印出来,如果设置日志级别高,不能打印日志级别低的信息
如果你是开发测试,你可以设置为debug,或者要更详细一点可以设置为trace。
Swagger:再也不用写API文档了
(1)通过Swagger实时生成api文档,这个时候你就不需要手动写接口文档为什么要接口文档?
主要:前端开发人员,还有测试人员