上传2020.04的框架学习心得

一.SpringMVC学习心得
1.什么是SpringMVC
Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架
2.SpringMVC的优点
(1) 清晰的角色分配
(2)与Spring框架集成
(3)支持多种视图,不仅限与jsp
3.SpringMVC的执行流程
(1)用户发送请求至前端控制器DispatcherServlet;
(2) DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
(3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
(4)DispatcherServlet 调用 HandlerAdapter处理器适配器;
(5)HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
(6)Handler执行完成返回ModelAndView;
(7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
(8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
(9)ViewResolver解析后返回具体View;
(10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
(11)DispatcherServlet响应用户。
在这里插入图片描述

4.SpringMVC中的异常处理
(1)使用SimpleMappingExceptionRosolver实现异常处理
在配置文件applicationContext.xml中配置对应的信息即可
优点:集成简单,扩展性良好,对代码没有入侵性
缺点:该方法仅能获取到异常信息,若在出现异常时,对需要获取除异常以外的数据的情况不适用
(2)实现HandlerExceptionResolver接口自定义异常处理器
需要实现HandlerExceptionResolver接口,并且在applicationContext.xml中注册实现该接口的bean
优点:集成简单,扩展性良好,对代码没有入侵性,同时能获取导致出现异常的对象
(3)使用@ExceptionHandler注解
增加一个类,在类中使用@ExceptionHandler注解声明异常处理,并且使所有的Controller都继承该类
优点:集成简单、扩展性好、不需要Spring配置
缺点:存在代码入侵性
未捕获异常的处理
只需要在web.xml中添加项

5.SpringMVC中的拦截器的使用
拦截器一般用过权限验证,记录请求信息的日志,判断是否用户登录
(1)通过实现HanderInterceptor接口来实现拦截器并在配置文件中配置拦截器

	<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="拦截路径"/>
			<mvc:exclude-mapping path="不需要拦截路径"/>
			<bean class="类路径"></bean>
	</mvc:interceptor>
</mvc:interceptors>
 实现HanderInterceptor通常需要实现其中的preHandle,postHandle, afterComletion方法

preHandle:在调用Controller之前执行,该拦截器是链式调用的,可以存在Interceptor,
如果返回false,则链式调用中断,请求结束
postHandle: 在DispatcherServlet进行视图渲染之前执行,也就说这个方法可以执行 ModlAndView操作
afterComletion:在DispatcherServlet进行视图渲染之后执行,一般用于关闭流操作

针对多个拦截器同时实现的情况下preHandle方法可以会按照配置文件中配置拦截器的顺序执行,但是postHandle方法和afterComletion放回会按照配置文件中配置拦截器相反的顺序执行

(2)通过实现WebRequestInterceptor接口来实现拦截器
此方法和实现HanderInterceptor方法大致相似,唯一区别是preHandle方法没有返回值,所以不会去中断链式请求。

6.SpringMVC文件上传
使用MultipartFile实现文件上传,Spring MVC会将上传的文件绑定到MultipartFile对象中。MultipartFile提供了获取上传文件内容、文件名等方法。通过transferTo()方法还可以将文件存储到硬件中
在这里插入图片描述

二.SpringBoot学习心得
1.什么是SpringBoot
Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。
2.SpringBoot的优点
(1)容易上手,提升开发效率,为 Spring 开发提供一个更快、更广泛的入门体验
(2)开箱即用,远离繁琐的配置
(3)提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等
(4)没有代码生成,也不需要XML配置
(5)避免大量的Maven导入和各种版本冲突
3.创建第一个SpringBoot项目并打包成Jar执行
(1) 创建一个maven项目,在pom.xml添加springboot的依赖并配置bulid

在这里插入图片描述
在这里插入图片描述

(2) 在资源文件resources下创建配置文件application.yml, 设置端口号为1234
(3) 创建启动类,使用SpringBoot的核心注解@SpringBootApplication
(4) 创建控制类以及实体类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(5) 通过maven打包成jar包通过java -jar xx执行
在这里插入图片描述

4.@SpringBootApplication的学习
@SpringBootApplication是SpringBoot项目的核心注解,作用是开启自动配置
在这里插入图片描述

通过源码可以看出主要是三个注解组成
(1)SpringBootConfiguration
其中SpringBootConfiguration注释等同于Configuration注解,注解的作用主要代表了一个配置类,这个配置类相当于一个xml配置文件
(2)EnableAutoConfiguration
开启SpringBoot的自动装配功能。主要是在classpath中搜寻META-INF/spring.factories配置文件,将其中对应的org.springframework.boot.autoconfigure.EnableAutoConfiguration对应的配置通过反射例化为对应的标注了@Configuration的JavaConfig形式的IoC容器配置类,然后汇总为一个并加载到IoC容器
(3)ComponentScan
自动扫描组件,类似于xml配置文件中的context:component-scan,主要是扫描指定包路径下的bean
5.SpringBoot自定义一个start
(1)创建一个的springboot项目,引入spring-boot-autoconfigure依赖
(2)创建配置类且在资源目录下面创建META-INF/spring.factores
在这里插入图片描述

在spring.factores配置的就是对应配置类的路径
(4)在另一个项目中添加自定义start的依赖项就能使用
6.SpringBoot整合mybatis
目录结构
在这里插入图片描述


在这里插入图片描述

在application.yml中添加数据库连接信息以及配置mybatis配置别名
用注解的方式实现mapper
在这里插入图片描述

在这里插入图片描述

三.SpringCloud学习心得
1.Eureka
Eureka服务端
Eureka服务端,即服务注册中心。它同其他服务注册中心一样,支持高可用配置。依托于强一致性提供良好的服务实例可用性,可以应对多种不同的故障场景。
Eureka客户端
Eureka客户端,途中的即服务提供者,主要处理服务的注册和发现。客户端服务通过注册和参数配置的方式,嵌入在客户端应用程序的代码中。
在这里插入图片描述

Eureka的demo
https://github.com/Bllling/eureka_demo
2.Ribbon
Ribbon是一个客户端负载均衡器,我们可以在配置文件中Load Balancer后面的所有机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器,我们也很容易使用Ribbon实现自定义的负载均衡算法。
Ribbon大致架构

在这里插入图片描述

负载均衡的规则
①.RoundRobinRule–轮询
②.RandomRule–随机
③.AvailabilityFilteringRule --会先过滤掉由于多次访问故障处于断路器跳闸状态的服务,还有并发的连接数量超过阈值的服务,然后对于剩余的服务列表按照轮询的策略进行访问
④.WeightedResponseTimeRule–根据平均响应时间计算所有服务的权重,响应时间越快服务权重越大被选中的概率越大。刚启动时如果同统计信息不足,则使用轮询的策略,等统计信息足够会切换到自身规则
⑤.RetryRule–先按照轮询的策略获取服务,如果获取服务失败则在指定的时间内会进行重试,获取可用的服务
⑥.BestAvailableRule --会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量小的服务
⑦.ZoneAvoidanceRule–默认规则,复合判断Server所在区域的性能和Server的可用行选择服务器

Ribbon的demo
https://github.com/Bllling/ribbon_demo

3.Feign
我们使用Ribbon客户端负载均衡实现微服务之间的调用,Ribbon本质上就是一个RestTemplate对象。使用RestTemplate时,除了要编写所调用微服务的URL,还需要包装所调用微服务所返回的结果。为了克服这些不足,Spring Cloud提供了声明式调用组件—Feign。
  Feign是一个基于接口的编程方式,开发者只需要声明接口和配置注解,在调度接口房法时,Spring Cloud根据配置来调度对应的REST风格的请求,从其他微服务系统中获取数据。

Feign的demo

https://github.com/Bllling/feign_demo

4.Hystrix
Spring Cloud Netflix Hystrix就是隔离措施的一种实现,可以设置在某种超时或者失败情形下断开依赖调用或者返回指定逻辑,从而提高分布式系统的稳定性.
Hystrix特性
(1)请求熔断
当Hystrix Command请求后端服务失败数量超过一定比例(默认50%), 断路器会切换到开路状态(Open).
这时所有请求会直接失败而不会发送到后端服务. 断路器保持在开路状态一段时间后(默认5秒), 自动切换到半开路状态(HALF-OPEN).
这时会判断下一次请求的返回情况, 如果请求成功, 断路器切回闭路状态(CLOSED), 否则重新切换到开路状态(OPEN).
(2)服务降级
Fallback相当于是降级操作. 对于查询操作, 我们可以实现一个fallback方法, 当请求后端服务出现异常的时候, 可以使用fallback方法返回的值
(3)依赖隔离
使用线程池来实现
(4)请求缓存
(5)请求合并
多个请求合并为一个请求

Hystrix流程
(1)执行execute()/queue做同步或异步调用
(2)判断熔断器是否打开,打开直接第四步
(3)判断线程池/队列/信号量是否饱满,依赖逻辑是否调用成功等
(4)getFallback()降级
在这里插入图片描述

5.Zuul
(1)什么是zuul
Zuul是spring cloud中的微服务网关
(2)Zuul的部分功能
①统一入口
为全部微服务提供唯一入口点,网关起到外部和内部隔离,保障了后台服务的安全性
②鉴权校验
识别每个请求的权限,拒绝不符合要求的请求
③动态路由
动态的将请求路由到不同的后端集群
④减少客服端与服务端的耦合
服务独立发展,通过网关层映射

(3)Zuul的过滤器
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值