Spring
控制反转
Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系,利用 Java 语言的反射功能实例化 Bean 并建立 Bean 之间的依赖关系。原理是工厂模式和反射。
面向切面
简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,对我们的已有方法进行增强。
事务
事务的传播级别:定义了事务在传播方面的控制范围。
数据的隔离级别:定义了事务在数据库读写方面的控制范围。
DEFAULT :默认值(也是SpringBoot的隔离级别默认值),表示使用底层数据库的默认隔离级别。大部分数据库为READ_COMMITTED(MySql默认隔离级别为REPEATABLE_READ) READ_UNCOMMITTED :该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读和不可重复读,因此很少使用该隔离级别。 (解决了丢失修改,但会出现脏读,不可重复读和幻读) READ_COMMITTED :该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。 (解决了更新丢失,脏读。但会出现不可重复读,幻读) REPEATABLE_READ :该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略。该级别可以防止脏读和不可重复读。 (解决了更新丢失,脏读,不可重复度,同时有人指出在 mysql 的 innodb 引擎上,配合 mvvc + gap 锁,已经解决了幻读问题) SERIALIZABLE :所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。 (解决所有问题,串行执行)
Spring MVC
前端控制器 DispatcherServlet:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。
处理器映射器 HandlerMapping:根据请求的URL来查找Handler
处理器适配器 HandlerAdapter:负责执行Handler
处理器 Handler:处理器,需要程序员开发
视图解析器 ViewResolver:进行视图的解析,根据视图逻辑名将ModelAndView解析成真正的视图(view)
视图View:View是一个接口, 它的实现类支持不同的视图类型,如jsp,freemarker,pdf等等
Mybatis
#{}和${}的区别
{}是预处理,可以有效防止sql注入
如何实现多租户
前端请求头携带租户id,拦截器获取租户id,放入ThreadLocal。编写拦截器集成Mybatis-plus的插件,把租户id拼接到sql里。还需要一个配置文件描述哪些表需要分租户。
SpringBoot
常用注解
@SpringBootConfiguration 配置文件功能
@SpringBootApplication
@RestController