框架解析

一、Spring - 5.1.0
Spring 是一个轻量级开源框架(无依赖),其目的主要为了简化开发。
1.1.两大核心: IOC - AOP
IOC :控制反转 - Spring容器 - 用于存放注入的对象。

D I :依赖注入 - 底层是反射 - 通过反射对对象进行实例化或赋值。

AOP :面向切面编程 - 应用程序在扩展功能时不修改源代码实现功能的扩展(但我在项目中一般用注解实现)。

注:在加载配置时,会使用DI注入并存放到IOC中。
二、SpringMVC - 5.1.0
背景: 因为什么之前什么都是Servlet在干,而且业务逻辑全是硬编码,代码不利于维护,所以有了MVC思想。

MVC思想: 将一个应用分成三个基本部分:Model(模型)、View(视图)、Controller(控制器),这三部分以最少的耦合协同工作,从而提应用的可扩展性及可维护性。
2.0. 执行流程
1.用户向服务器发送请求,请求被SpringMVC的前端控制器 DispatcherServlet 拦截。
2.DispatcherServlet 调用HandlerMapping(处理器映射器)解析。
3.获得Handler(Controller),调用Handler(Controller)实际处理的方法。
4.提取请求中的模型数据,执行Handler(Controller)。
5.Handler(Controller)执行完成后,向 DispatcherServlet 返回一个ModelAndView对象。
6.ViewResolver结合Model和View来渲染视图。
7.将视图渲染结果返回给客户端。

发送请求 - 拦截 - 解析 - 调用方法 - 提取模型数据 - 执行方法 - 返回模型视图 - 响应到客户端
2.1. 原理图

原理:

1.用户发送请求到DispatcherServlet,即前端控制器
2.DipatcherServlet调用处理器映射器HandlerMapping解析
3.处理器映射器HandlerMapping根据请求的url找到具体的处理器,生成处理器对象和处理器拦截器一并发给DispatcherServlet
4.DispatcherServlet通过处理器适配器HandlerAdapter调用处理器;
5.执行处理器,即controller,也叫后端控制器
6.controller执行完毕后返回ModelAndview给处理器适配器HandlerAdapter
7.处理器适配器HandlerAdapter将controller返回的ModelAndView发送给DispatherServlet
8.DispatcherServlet将ModelAndView传给视图解析器viewResolver
9.viewResoler解析后返回具体的view
10.DispatcherServlet对view进行渲染视图(即将模型数据填充到视图中)
11.DispatcherServlet响应客户
2.2. 为什么使用SpringMVC而不是Struts2
Spring 和 SpringMVC 是非常完美的无缝链接

如果使用注解的话,SpringMVC基本上是零配置,而Struts需要配置很多

三、Mybatis - 3.4.6
Mybatis是一个 定制化 SQL 、存储过程以及高级映射的持久化框架。

主要思想:
1.将sql语句剥离出来,用注解或mapper进行配置。
2.做到不修改程序的情况下,修改sql语句。
ORM(对象/关系映射): 把关系数据库包装成面向对象的模型,封装了JDBC,公开方法
3.0. 执行流程
1.加载 mybatisConfig.xml 得到 SqlSessionFactoryBuilder(会话工厂构建者类)。
2.调用 SqlSessionFactoryBuilder 的 build 方法创建 SqlSessionFactory(会化工厂)实例。
3.调用 openSession(),得到 SqlSession(会话)
4.通过 Executor(执行器)操作数据库。
5.通过 ResultSetHandler(结果集处理器)处理数据。
6.关闭会话 close()。

创建会话工厂 - 创建会话 - 执行sql - 处理数据 - 关闭会话
3.1. 原理图

原理:

1.加载JDBC驱动;
2.建立并获取数据库连接;
3.创建 JDBC Statements 对象;
4.设置SQL语句的传入参数;
5.执行SQL语句并获得查询结果;
6.对查询结果进行转换处理并将处理结果返回;
7.释放相关资源(关闭Connection,关闭Statement,关闭ResultSet);
3.2. 为什么使用Mybatis而不是Hibernate
Hibernate 是一个重量级框架,只适用场景不太复杂的时候

Mybatis 虽然在映射规则和SQL,工作量略大,但它灵活,体现在多关系情况下
3.3. SSM - SpringMVC -> Mybatis 执行流程
01.客户端发送请求
02.请求被SpringMVC的前端控制器 DispatcherServlet 拦截
03.DispatcherServlet 调用HandlerMapping(处理器映射器)解析
04.获得 Controller(控制器),调用实际处理的方法
05.执行之前,提取请求中模型的数据,封装到方法的形参中,再执行 Controller(控制器)
06.创建 SqlSessionFactory(会话工厂)
07.调用 openSession(),得到 SqlSession(会话)
09.通过 Executor(执行器)操作数据库
10.通过 ResultSetHandler(结果集处理器)处理数据
11.关闭会话 close()
12.Controller(控制器)执行完成后,向 DispatcherServlet 返回一个ModelAndView对象
13.响应到客户端
四、SpringBoot
SpringBoot 是一个 微框架,它与目前流行的微服务紧密联系,可以开发微应用。

SpringBoot 主要作用是 简化开发、减少配置,主要提倡 一键部署、习惯优于配置。

SpringBoot 的核心还是 Spring,是 Spring + SpringMVC 的组合框架。
SpringBoot 默认模板是thymeleaf,我们用的模板是 freemarker,后缀为 .ftl。
4.1. 讲义
五、Redis - 3.x
Redis 是一个 单线程 - 非关系型 - 内存数据库。
5.0. 案例
将第一个用户访问的结果存储到内存,这样第二个用户访问的时候就会去内存中获取数据。
5.1. 优点
1. 支持多种数据类型
2. 持久化存储
3. 丰富的特性
4. 性能很好,读写速度快
5. 原子性 - 要么成功执行要么失败完全不执行
5.2. 缺点

  1. 如果进行完整重同步,由于需要生成rdb文件,并进行传输,会占用主机的CPU,并会消耗现网的带宽。
  2. 修改配置文件,进行重启,将硬盘中的数据加载进内存,时间比较久。此时Redis不能提供服务。
    5.3. 思路
    缓存步骤:
    1. 去MySQL中获取数据
    2. 存入Redis中
    3. 存入Ssession中

数据获取:
1. 去Ssession
2. 没有,去Redis
3. 没有,去MySQL

数据同步:
1. 数据获取
2. 对数据进行操作
3. 存入Redis,进行覆盖
4. 存入Ssession,进行覆盖

本次项目写的规则可以根据Key获得以下信息:
1. Service 类路径
2. ServiceImpl 类路径
3. Method 方法名
4. Ssession 键名
5. Redis 键名
5.4. 讲义
我们一般都是把哪些不经常改动的数据给放入缓存,这样在我们第二个用户访问的时候,它就会去内存中获取,这样子就可以提升用户的请求速度,还可以减轻数据库的负载,这就是我所了解的。

注:可以通过 Redis - 聊到 负载均衡 - 集群 - 分布式

CPU 不是瓶颈 …

我们一般都是把哪些不经常改动的数据给放入缓存,这样在我们第二个用户访问的时候,它就会去内存中获取,这样子就可以提升用户的请求速度,还可以减轻数据库的负载,但因为Redis是内存数据库,当服务器读取数据的时候它会去内存中获取数据,这样子会占用服务器的CPU,当服务器CPU过高的时候,会出现任务执行不过来,从而导致请求失败,那么我们的解决方案是升级虚拟机到更高的型号,当然我们会监控,让它尽量不会出现这种情况,这就是我所了解的。
六、Nginx - 1.15.6
Nginx 是一款 轻量级 高性能的HTTP 和 反向代理服务器,占用内存少,并发能力强。

Nginx 主要用来做七层负载均衡。

并发性能:官方支持每秒5万并发,实际国内一般到每秒2万并发,有优化到每秒10万并发的
6.1 特点
模块化设计:良好的扩展性,可以通过模块方式进行功能扩展。
高可靠性:主控进程和worker是同步实现的,一个worker出现问题,会立刻启动另一个worker。
内存消耗低:一万个长连接(keep-alive),仅消耗2.5MB内存。
支持热部署:不用停止服务器,实现更新配置文件,更换日志文件、更新服务器程序版本。
并发能力强:官方数据每秒支持5万并发。
功能丰富:优秀的反向代理功能和灵活的负载均衡策略。
6.2 工作原理图

七、集群、分布式
7.1. 区别
分布式,是以缩短单个任务 执行时间 来提升效率的。
集群,则是通过提高单位时间内执行的 任务数 来提升效率。

分布式,一个业务分拆成多个子业务,部署在不同的服务器上。
集群,同一个业务,部署在多个服务器上。

分布式,中的每一个节点,都可以做集群。
集群,并不一定就是分布式的。

分布式,一个服务器垮了,哪这个业务就不可访问了。
集群,一台服务器垮了,其它的服务器可以顶上来。
7.2. 案例
如果一个业务由多个子业务组成

采用 分布式 方案,每台服务器只负责处理一个子业务。

而采用 集群 方案,每台服务器都能独立处理这个业务。
7.3. 分布式集群方案图

7.4. 负载均衡
负载均衡:是一种动态均衡技术,监控网络状况,合理分配业务,核心是 分摊压力。

应用场景:集群

两个核心:选谁、转发
十、反射
10.1. 原理
反射就是在运行时才知道要操作的类是什么。
10.2. 背景
想利用反射动态调用Service方法。实践发现,反射调用Service方法后,@Resource注入的对象为空。
10.3. 原因
反射机制脱离了spring容器的管理,导致@Resource失效。
10.4. 解决方案
在服务器启动时初始化当前类,并存入当前类对象,使用当前类对象去调用方法即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值