Spring基础概念

Spring基于IOC反转,依存于ssh框架(struts+Spring+hibernate)

SSH框架简介:

Struts是一款mvc开源框架,采用一个过滤器作为控制器,调用过程为:

                          Spring基础概念

1.客户端初始化一个请求,指向Servlet容器

2.请求经过一系列过滤器(filter)到达filterDispatcher(分发器)

3.FilterDispatcher询问ActionMapper(structs.xml中配置)来映射到具体的action

4.决定好调用的action之后,FilterDispatcher把请求交给ActionProxy

5.ActionProxy通过配置文件寻找到要调用的action类

6.ActionProxy创建一个ActionInvocation的实例

7.ActionInvocation实例使用命名模式调用action,在此过程中可以添加拦截器(权限校验等)

8.执行完之后返回结果,通常是JSP或者FreeMarker的模板

MVC思想

M指的model,V指的view,C指的控制器,使用目的是使数据模型与节目分离

运行过程:

请求->前端控制器(DispatcherServlet)->处理映射器(HandlerMapping)->处理适配器(HandlerAdapter)执行handler(进行开发)->生产ModelAndView->视图解析器(View Resolver)->视图View

 

1.前端控制器(DispatcherServlet)

  (1). 不需要进行开发。

  (2). 作用:接受请求,响应结果,相当于一个转发器。

  (3). 减少了其他组件的耦合度。

 2.处理器映射器(HandlerMapping)

  (1). 不需要进行开发。

  (2). 作用:根据请求的URL查找Handler。

 3.处理器适配器(HandlerAdapter)

  (1). 不需要进行开发。

  (2). 作用:按照特定的规则去执行Handler。

 4.处理器(Handler)

  (1). 需要进行开发。

  (2). 要求:必须要按照HandlerAdapter的要求去编写。

 5.视图解析器(View Resolver)

  (1). 不需要进行开发。

  (2). 作用:进行视图解析,根据逻辑视图名解析成真正的视图(View)

 6.视图(View )

  (1). 需要进行开发。

  (2). 说明:View是一个接口,实现类支持不同的View类型(jsp、freemaker、pdf.........)

SpringMVC运行过程

 1、客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.

  2、DipatcherServlet接收到这个请求之后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及HandlerMapping的配置找到处理请求的处理器(Handler)。

  3-4、DispatcherServlet根据HandlerMapping找到对应的Handler,将处理权交给Handler(Handler将具体的处理进行封装),再由具体的HandlerAdapter对Handler进行具体的调用。

  5、Handler对数据处理完成以后将返回一个ModelAndView()对象给DispatcherServlet。

  6、Handler返回的ModelAndView()只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet通过ViewResolver将逻辑视图转化为真正的视图View。

  7、Dispatcher通过model解析出ModelAndView()中的参数进行解析最终展现出完整的view并返回给客户端。

 

Hibernate工作原理

1.读取并且解析配置文件

2.读取并且解析映射信息,创建sessionFactory

3.打开session

4.创建事务Transation

5.持久化操作

6.提交事务

7.关闭session

8.关闭sessionFactory

Hibernate优缺点

优点: 

1: hibernate是基于ORMapping技术的开源的框架,对JDBC进行了轻量级的封装,使用面向对象的思维来操纵数据库。 

2:hibernate提供了session缓存和二级缓存,对于不需要进行复杂查询的系统,性能有提升。 

3:低侵入式设计 

 

缺点: 

1:hibernate学习成本太高。 

2:不适合有复杂的sql查询(统计) 。 

3:不适合大量的聚集操作,(存储过程)

优缺点补充:

1、 不需要编写的SQL语句(不需要编辑JDBC),只需要操作相应的对象就可以了,就可以能够存储、更新、删除、加载对象,可以提高生产效; 

2、因为使用Hibernate只需要操作对象就可以了,所以我们的开发更对象化了; 

3、使用Hibernate,移植性好(只要使用Hibernate标准开发,更换数据库时,只需要配置相应的配置文件就可以了,不需要做其它任务的操作); 

4、Hibernate实现了透明持久化:当保存一个对象时,这个对象不需要继承Hibernate中的任何类、实现任何接口,只是个纯粹的单纯对象—称为POJO对象(最纯粹的对象—这个对象没有继承第三方框架的任何类和实现它的任何接口) 

5、Hibernate是一个没有侵入性的框架,没有侵入性的框架我们一般称为轻量级框架 

6、Hibernate代码测试方便。

 

Spring工作原理

内部最核心的就是IOC了, 

动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射 

反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置 

文件来动态的创建对象,和调用对象里的方法的 。 

  Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 

在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 

配置类达到的。 

  Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明 

管理的(Spring根据这些配置 内部通过反射去动态的组装对象) 

  要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。 

Spring里用的最经典的一个设计模式就是:模板方法模式。(这里我都不介绍了,是一个很常用的设计模式) 

 

Spring发展

1.x时代,IOC和AOP都是通过xml文件实现的,难以管理

2.x时代,可以使用注解对Bean进行申明和注入,但是仍然没有解决xml冗余问题

3.x,4.x时代,使用java代码与注解就可以进行配置,新增了websocket等插件支持

 

 

Spring:一个轻量级的IOC和AOP容器

SpringMVC:将Spring与Mvc模式整合

SpringBoot:将手动配置的过程自动化封装,提供了默认配置,提供了快速启动方式。 Spring Boot的核心思想就是约定大于配置,一切自动完成。采用 Spring Boot可以大大的简化你的开发模式,所有你想集成的常用框架,它都有对应的组件支持。

SpringCloud:利用SpringBoot的开发便利性简化了分布式基础设施开发,如注册中心,配置中心,消息总线,负载均衡,断路器,数据监控等。微服务是可以独立部署,水平扩展,独立访问的服务单元

Spring Cloud架构

  我们从整体来看一下 Spring Cloud主要的组件,以及它的访间流程

  1、外部或者内部的非 Spring Cloud目都统一通过API网关(Zuul)来访可内部服务.

  2、网关接收到请求后,从注册中心( Eureka)获取可用服务

  3、由 Ribbon进行均负载后,分发到后端的具体实例

  4、徹服务之间通过 Feign进行通信处理业务

  5、 Hystrix负责处理服务超时熔断

  6、 Turbine监控服务间的调用和焠断相关指标