框架贯通之框架+mvc+spring+springmvc+ssm+springboot

1. 框架与设计模式

框架通常是代码重用,而设计模式是设计重用。
设计模式是对反复出现的问题的解决方案的描述,是一种思想用于处理细节的,比框架更加抽象。
框架是已经用代码实现的,可以执行也可以复用。设计模式是比框架更小的元素,一个框架往往会包含一个或者多个设计模式。框架总是针对某一特定领域的,而设计模式则可以适用于各个应用。

2. MVC框架模式

MVC: Model View Controller 模型-视图-控制器
视图:用户看到并与之交互的界面。
模型:表示企业数据和业务规则。在MVC的3个部件中,模型拥有最多的处理任务。被模型返回的数据是独立的,与数据格式无关。这样的一个模式能够为多个视图提供数据,这样一来模型的代码只需要写一次便能够被多个视图重用,减少了代码的重复性。
控制器:接受用户的输入并调用相应的模型和视图来完成用户的需求,所以当用户点击web页面中的超链接和发送表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并根据请求来调用哪个模型去处理请求,然后在决定用哪个视图来显示返回的数据。
职责:Contorller:控制器

  1. 取得表单的数据
  2. 调用业务逻辑
  3. 转向指定的页面
    Model:模型
  4. 业务逻辑
  5. 保存数据的状态(dao,service)
    View:视图
    显示页面
    Mvc事务任务:
    将url映射到java类或java类的方法
    封装用户提交的数据
    处理请求—调用相关的业务处理—封装响应的数据
    将响应的数据进行渲染,JSP/ html等表示层数据

3. spring框架

spring 是一个开源框架,Spring 是一个 IOC 和 AOP 容器框架。 Spring 主要核心是:
(1) 控制反转(IOC):
Spring 容器使用了工厂模式为我们创建了所需要的对象,spring 通过控制反转机制自动为我们实例化一个对象。直接调用即可,这就是控制反转的思想。实例化一个 java 对象有三种方式:使用类构造器,使用静态工厂方法,使用实例工厂方法。
(2)依赖注入(DI):
Spring 使用 Java Bean 对象的 Set 方法或者带参数的构造方法为我们在创建所需对象时将其属性自动设置所需要的值的过程就是依赖注入的基本思想。
(2) 面向切面编程(AOP):
在面向对象编程(OOP)思想中,我们将事物纵向抽象成一个个的对象。而在面向切面编程中,我们将一个个对象某些类似的方面横向抽象成一个切面,对这个切面进行一些如权限验证,事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。
在 Spring 中,所有管理的对象都是 JavaBean 对象,而 BeanFactory 和 ApplicationContext 就是 spring 框架的两个 IOC 容器,现在一般使用 ApplicationContext
Spring 中的设计模式:
代理模式—Spring 中两种代理方式,若目标对象实现了若干接口,spring 使用 JDK 的 java.lang.reflect.Proxy 类代理,若目标对象没有实现任何接口,spring 使用 CGLIB 库生成目标对象的子类。
单例模式—在 spring 配置文件中定义的 bean 默认为单例模式。
模板方法模式—用来解决代码重复的问题。比如: RestTemplate, JmsTemplate, JpaTemplate。
前端控制器模式—Srping 提供了 DispatcherServlet 来对请求进行分发。
视图帮助(View Helper )—Spring 提供了一系列的 JSP 标签,高效宏来辅助将分散的代码整合在视图里。
依赖注入—贯穿于 BeanFactory/ApplicationContext 接口的核心理念。

工厂模式—在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。Spring 中使用 BeanFactory 用来创建对象的实例。

4 SpringMVC框架

4.1 SpringMVC简介

springMVC框架是基于Java的实现了基于MVC框架模式的请求驱动类型的轻量级web框架。前端控制器是DispatcherServlet接口实现类,映射处理器是HandlerMapping接口实现类,视图解析器是ViewResolver接口实现类,页面控制器是Controller接口实现类。SpringMVC的工作流程图如下:
框架贯通之框架+mvc+spring+springmvc+ssm+springboot

(1)客户端请求提交到前端控制器DispatcherServlet;
(2)前端控制器DispatcherServlet查找一个或者多个映射处理器HandlerMapping,从而确定调用哪个页面控制器Controller对请求进行处理;
(3)DispatcherServlet将请求提交给Controller;
(4)Controller根据业务逻辑对请求进行处理,并返回ModelAndView;
(5)DispatcherServlet查找一个或者多个ViewResolver,得到ModelAndView指定的视图view,并将model中的数据传入视图view中进行渲染;
(6)DispatcherServlet将渲染后的视图返回响应;
由上述过程可见,DispatcherServlet是Spring MVC的核心,它负责协调

SpringMVC的各个组成部分对所有的Http请求进行处理,其主要工作如下:
(1)截获符合特定格式的Http请求;
(2)初始化DispatcherServlet上下文对应的WebApplicationContext,并将其与业务层、持久层的WebApplicationContext关联起来;
(3)初始化Spring MVC的各个组件,并装配到DispatcherServlet中;
流程二:

Springmvc架构原理解析
第一步:发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping查找 Handler
可以根据xml配置、注解进行查找
第三步:处理器映射器HandlerMapping向前端控制器返回Handler
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器去执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView是springmvc框架的一个底层对象,包括 Model和view
第八步:前端控制器请求视图解析器去进行视图解析
根据逻辑视图名解析成真正的视图(jsp)
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染
视图渲染将模型数据(在ModelAndView对象中)填充到request域
第十一步:前端控制器向用户响应结果

4.2 SpringMVC框架中的接口
DispatcherServlet接口:Spring提供的前端控制器,所有的请求都是由它来进行分发,围绕着他进行设计,配置在web.xml文件中的,拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。
在DispatcherServlet将请求分发到对应的Controller之前,分发给不同处理器,需要借助Spring提供的HandlerMapping才能定位到相应的Controller. 有了DispatcherServlet减少了其它组件之间的耦合度。
HandlerMapping接口:根据请求的url查找Handler,完成客户请求到Controller的映射。
处理器适配器HandlerAdapter:按照特定规则(HandlerAdapter要求的规则)去执行Handler处理器 (需要程序员开发):

Controller接口:需要为并发用户处理请求,在实现Controller接口时,必须保证线程安全且可重用。
在Controller完成用户请求的处理,返回ModelAndView对象给DispatcherServlet,ModelAndView对象中包含了模型Model和视图View。
从宏观角度进行考虑,DispatcherServlet是整个Web应用的控制器;从微观角度进行考虑,Controller是单个Http请求处理过程的控制器。
ViewResolver接口:根据ModelAndView对象在web应用查找view视图,并将model中是数据传入到view视图中进行渲染。(jsp、freemarker、pdf…)

4.3springmvc运行原理
1.客户端请求提交到DispartcherServlet
2.由DispartcherServlet控制器查询一个或多个HeadlerMapping,找到处理请求的Contorller
3.DispartcherSevlet将请求提交到Contorller
4.Contorller调用业务逻辑处理后,返回ModelAndView
5.DispartcherSevlet查询一个或者多个ViewResoler视图解析器,找到ModelAndView指定的视图
6.视图负责将要结果显示到客户端

Springmvc
执行流程:

用户发起请求—传给dispatcherservlet前端控制器—前端控制器去找到映射器handlermapping—返回给前端控制器—根据映射器去适配映射器handleradapter—就是contorller,再由具体的controller去执行业务----返回一个modelandview—给控制器—控制器—去配置视图解析器—返回给前端

ssm框架

Ssm框架分三层,表现层,持久层,业务层
持久层是dao(mapper)层 业务层是service层 表现层是contorller层
Dao层是先设计dao接口,在spring配置中定义此接口的实现类,调用进行数据业务处理完成对业务层的功能接口
Service层设计接口再再设计其实现类,业务组合调用mapper层
Contorller层(handle层):控制业务模块流程的控制,调用service层的接口
View层主要负责前台jsp页面的表示.
SSM五大核心组件:
1.前端处理器 DispatcherServlet

2.映射处理器 HandlerMapping

3.业务处理控制器 Controller

4.控制器返回的视图和模型的对象 ModelAndView

5.视图解析器 ViewResolver
框架贯通之框架+mvc+spring+springmvc+ssm+springboot

Springboot框架

5.1 Springmvc到springboot
传统springmvc搭建步骤:

  1. web.xml
    加载spring容器 applicationcontext.xml
    配置springmvc前端控制器 DispartcherSevlet
  2. applicationcontext.xml
    <context:component-scan base-package=”com.xxx”>context:component-scan
    扫描业务层(service层和dao层)
  3. springmvc.xml
    扫描Contorller
    配置视图解析器
    初始化容器applicationcontext替代:
    AnnotationConfigWebApplicationContext ac=new AnnotationConfigWebApplicationContext();
    把servlet注册给容器的三种方法
  4. web.xml
  5. 采用注解继承HttpServelt,注解@WebServlet(“/***”)访问的url
    替换applicationcontext
    写一个appconfig注解@configuration @ComponentScan,注册给AnnotationConfigWebApplicationContext对象

Springboot演变,自动装配的原理

Spring-boot-starter组件:即开箱即用,依赖一个包即使用
springFramwork->ioc控制反转(ioc容器)—>applicationcontext.xml
bean的装配->context.getbean(“name”)对象实例
Ioc控制反转,反转创建对象过程,降低耦合性

项目越来越大,配置文件越多—难以维护

spring2.5版本,提供注解的支持
@Contorller,@Service
注解通过context:component-scan扫描注解的类,装载到ioc容器
(以前手动的方式把bean装配到ioc容器)

Sping3.0版本,实现无配置化,javaconfig
配置类@Configuration
Enable*自动装配—由spring本身提供
(自动的方式把bean装配到ioc容器)
@AutoWried//依赖注入

RedisTemplate实例是如何装配

@EnableAutoConfiguration自动装配
依赖于
Spring中的JavaConfig