本文源码:GitHub·点这里 || GitEE·点这里

一、Spring框架

1、框架概述

Spring是一个开源框架,框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。Spring是一个分层的轻量级开源框架。

基本特性:分层架构、高内聚低耦合、支持AOP编程、事务管理、集成测试、集成各种框架。

2、核心组件

核心容器:包含Bean的创建、配置、管理等功能。

AOP切面编程:可以帮助应用程序解耦。

数据访问:集成了JDBC,常用的Dao层框架hibernate,mybatis等。

Web编程:集成流程的MVC框架,实现界面逻辑和应用程序分离。

3、Bean对象理解

Spring容器负责创建,装配,设置属性,进而管理整个生命周期的对象,称为Bean对象。

装配方式:XML格式、注解扫描、Java代码装配。

作用域:用于确定spring创建bean实例个数,比如单例Bean,原型Bean。singleton默认单例、prototype多例、request请求、session会话级、global-session。

生命周期:实例化,属性加载,初始化前后管理,销毁。

4、常用核心注解

Controller:标记一个类是Handler,基于@Mapping相关注解(@GetMapping、@PostMapping、@PutMapping、@DeleteMapping),用来关联请求和Controller方法之间的映射关系,这样的Controller 就可以被请求访问。

RequestMapping:处理请求地址映射的注解,可作用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以类上标注地址作为父路径。

Resource:按照ByName自动注入,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。

Service:可以取代具体配置文件的Bean管理,定义的bean默认是单例的,默认名称是类名且首字母小写。

5、IOC与DI思想

IOC容器

Java系统中对象耦合关系十分复杂,系统的各模块之间依赖,微服务模块之间的相互调用请求,都是这个道理。降低系统模块之间、对象之间、微服务的服务之间耦合度,是软件工程核心问题之一。因为Spring框架中核心思想就是IOC控制反转,用来实现对象之间的解耦。

依赖注入

IOC给对象直接建立关系的动作,称为DI依赖注入(Dependency Injection);依赖:对象A需要使用对象B的功能,则称对象A依赖对象B。注入:在对象A中实例化对象B,从而使用对象B的功能,该动作称为注入。

6、Aop切面编程

通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。核心作用:可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的复用性和开发效率。AOP提供了取代继承和委托的一种新的方案,而且使用起来更加简洁清晰,是软件开发中的一个热点理念。

实现方式:JDK动态代理、CgLib字节码增强、Spring半自动代理、Spring全自动代理。

7、事务管理

事务是指作为单个逻辑工作单元执行的一系列操作(SQL语句)。这些操作要么全部成功,要么全部不成功。Spring事务管理的本质就是封装了数据库对事务支持的操作,使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务的提交和回滚。

核心API封装

PlatformTransactionManager:平台事务管理器,Spring管理事务,必须使用事务管理器进行事务配置时,核心方法:获取事务,提交事务,回滚事务。

TransactionDefinition:该对象封装事务详情(事务定义、事务属性),例如:隔离级别、是否只读、超时时间 等。

TransactionStatus:用于记录当前事务运行状态。例如:是否有保存点,事务是否完成。Spring底层根据状态进行相应操作。

8、配置文件

在Spring的配置文件中,通常会配置下列核心内容;

  • 读取外部配置文件,例如JDBC参数;
  • 配置数据库连接池,例如Druid、C3P0等;
  • 整合环境配置,例如SSM或者SSH集成;
  • 管理Transaction事务的控制方式;
  • 整合常用组件,例如邮件、任务、MQ等;

在实际开发中,复杂的项目配置十分繁杂且不好管理,可能项目中涉及不同环境的配置文件都有几十个,所在在SpringBoot框架中采用统一约定的方式简化。

9、环境整合SSM、SSH

Spring框架聚合很强的整合能力,例如常见的整合Mybatis,Mvc,Hibernate,Redis等系列组件,为开发环境的集成提供很大的便利,整体职责上分为几层:控制层、业务逻辑层、数据持久层、域模块层、中间件层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。

10、设计模式

单例模式:Spring框架中Bean对象的管理,默认单例,也可以显式标识为多例模式。

工厂模式:通过对应的工厂来生成类的对象,这种设计方式符合“开闭”原则。Spring框架中BeanFactory和Bean的用法。

适配器模式:SpringMvc执行控制中,前段控制器DispatcherServlet调用处理器适配器去执行Handler,处理器适配器去执行Handler,给适配器返回ModelAndView。

责任链模式:DispatcherServlet核心方法doDispatch。HandlerExecutionChain只是维护HandlerInterceptor的集合,可以向其中注册相应的拦截器,本身不直接处理请求,将请求分配给责任链上注册处理器执行,降低职责链本身与处理逻辑之间的耦合程度。

二、SpringMvc模式

1、Mvc模式理念

SpringMVC是一种基于Java实现的MVC设计模式的请求驱动类型的轻量级Web框架,出自Spring框架全家桶,与Spring框架无缝整合,使用了MVC架构模式的思想,将Web层进行职责解耦。结构松散,几乎可以在SpringMVC中使用各类视图,各个模块分离而且耦合度非常低,且易于扩展。与Spring无缝集成,且简单,灵活,容易上手。

2、执行流程

发起请求到前端控制器DispatcherServlet;前端控制器请求HandlerMapping查找,Handler可以根据xml配置、注解进行查找;

处理器映射器HandlerMapping向前端控制器返回Handler;前端控制器调用处理器适配器去执行Handler;处理器适配器去执行Handler;

Handler执行完成给适配器返回ModelAndView;处理器适配器向前端控制器返回ModelAndView,ModelAndView是springmvc框架的一个底层对象,包括Model和view;

前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图;视图解析器向前端控制器返回View;前端控制器进行视图渲染,视图渲染将模型数据(在ModelAndView对象中)填充到request域中;前端控制器向用户响应结果;

3、核心组件

前端控制器:请求离开浏览器后,最先到达的就是DispatcherServlet,是整个流程控制的中心。

处理器映射器:根据请求的url路由到指定接口,用户请求找到Handler处理器。

处理器适配器:按照特定规则去执行Handler,支持多种处理器,各种处理器中的处理方法各不相同。

处理器:处理用户请求,涉及具体业务逻辑,需要根据业务需求开发。

视图解析器:将请求的响应结果生成View,根据逻辑视图名解析成物理视图名,就是具体页面地址。

视图:Mvc框架提供很多的View视图类型的支持,包括:jsp、freemarker、pdf等。

4、参数处理

requestParam:主要用于在SpringMvc框架的控制层获取参数,三个常用参数:defaultValue表示设置默认值,required 通过boolean设置是否是必须要传入的参数,value值表示传入的参数名称。

RequestBody:接收请求体中传递给后端的Json字符串数据的,GET方式无请求体,所以使用@RequestBody接收数据时,不能使用GET方式提交数据,需要用POST方式进行提交。

ResponseBody:该注解用于方法的返回对象,可以通过配置转换器为指定数据响应格式,如果希望返回的数据不是View试图页面,而是指定数据格式的时候使用,例如:Json、Xml等。

5、整合Spring框架

  • 配置扫描接口文件;
  • 启动MVC默认的注解映射的方式;
  • 配置视图解析器;
  • Web.xml配置加载Spring-Mvc文件;

6、对比WebFlux

响应式编程是一种基于数据流和变化传递的声明式的编程范式,WebFlux是Web控制端响应式编程中的组成部分,在Spring官网上有说明,不是为了替代SpringMvc,是用来提供更多场景的解决方案。

三、SpringBoot框架

1、常用基础功能

  • 环境搭建和注解启动机制,日志打印;
  • 全局异常处理,定时任务异步任务使用;
  • 拦截器配置,置AOP切面编程,文件管理;
  • 整合JWT、Shiro、Security等常用安全组件;
  • 集成Actuator监控组件,系统打包运行;

2、整合数据源

  • 整合JdbcTemplate,JPA,多数据源配置;
  • 集成Druid、C3P0常用连接池;
  • 整合Mybatis框架,集成分页管理;

3、集成常用中间件

  • 集成Redis缓存,Cache注解模式;
  • 集成ElasticSearch框架,实现高性能搜索引擎
  • 基于Swagger2 ,构建接口管理界面;

整个SpringBoot框架是基于Spring框架之上多个很多约定的规范,底层原理并没有改变,更多是熟悉各种用法,用多就会明白。

四、对比分析

Spring框架相对Spring开源生态是最底层的实现原理,SpringMvc是基于之上而来的,主要简化Web控制层的开发,例如之前的Struts、Servlet都逐渐被替换。

SpringBoot则在Spring+Mvc基础上,实现很强大的约定配置,对复杂的环境做了约定的集成,简化开发配置,业务性开发还是一样的,在SSM环境下不管项目配置启动调试都十分的复杂,到SpringBoot层面之后被不断简化,所以SpringBoot学习在理解约定的配置规范后,基本很容易上手。

五、源代码地址

GitHub·地址
https://github.com/cicadasmile
GitEE·地址
https://gitee.com/cicadasmile

推荐阅读:编程体系整理

序号 项目名称 GitHub地址 GitEE地址 推荐指数
01 Java描述设计模式,算法,数据结构 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
02 Java基础、并发、面向对象、Web开发 GitHub·点这里 GitEE·点这里 ☆☆☆☆
03 SpringCloud微服务基础组件案例详解 GitHub·点这里 GitEE·点这里 ☆☆☆
04 SpringCloud微服务架构实战综合案例 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
05 SpringBoot框架基础应用入门到进阶 GitHub·点这里 GitEE·点这里 ☆☆☆☆
06 SpringBoot框架整合开发常用中间件 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
07 数据管理、分布式、架构设计基础案例 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
08 大数据系列、存储、组件、计算等框架 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆

编程体系结构(08):Spring.Mvc.Boot框架的更多相关文章

  1. Spring MVC 学习总结(十)——Spring+Spring MVC+MyBatis框架集成(IntelliJ IDEA SSM集成)

    与SSH(Struts/Spring/Hibernate/)一样,Spring+SpringMVC+MyBatis也有一个简称SSM,Spring实现业务对象管理,Spring MVC负责请求的转发和 ...

  2. Spring MVC + jpa框架搭建,及全面分析

    一,hibernate与jpa的关系 首先明确一点jpa是什么?以前我就搞不清楚jpa和hibernate的关系. 1,JPA(Java Persistence API)是Sun官方提出的Java持久 ...

  3. hibernate+spring+mvc+Easyui框架模式下使用grid++report的总结

    最近刚开始接触hibernate+spring+mvc+Easyui框架,也是刚开通了博客,希望能记录一下自己实践出来的东西,让其他人少走弯路. 转让正题,以个人浅薄的认识hibernate对于开发人 ...

  4. Spring MVC测试框架

    原文链接:http://jinnianshilongnian.iteye.com/blog/2004660 Spring MVC测试框架详解——服务端测试 博客分类: springmvc杂谈 spri ...

  5. Spring MVC测试框架详解——服务端测试

    随着RESTful Web Service的流行,测试对外的Service是否满足期望也变的必要的.从Spring 3.2开始Spring了Spring Web测试框架,如果版本低于3.2,请使用sp ...

  6. [读后感]spring Mvc 教程框架实例以及系统演示下载

    [读后感]spring Mvc 教程框架实例以及系统演示下载 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致&qu ...

  7. Spring MVC Web框架

      1. Spring MVC简介 Spring MVC是java EE平台请求驱动类型的轻量级Web框架,使用了MVC设计模式的思想,spring框架的主要优势之一就是分层架构,分层架构允许选择使用 ...

  8. Spring MVC 学习总结(六)——Spring+Spring MVC+MyBatis框架集成

    与SSH(Struts/Spring/Hibernate/)一样,Spring+SpringMVC+MyBatis也有一个简称SSM,Spring实现业务对象管理,Spring MVC负责请求的转发和 ...

  9. Spring+Spring MVC+MyBatis框架集成

    目录 一.新建一个基于Maven的Web项目 二.创建数据库与表 三.添加依赖包 四.新建POJO实体层 五.新建MyBatis SQL映射层 六.JUnit测试数据访问 七.完成Spring整合My ...

随机推荐

  1. C++11的decltype关键字

    C++11的decltype关键字 概述 decltype关键字和auto有异曲同工之处 有时我们希望从表达式的类型推断出要定义的变量类型,但是不想用该表达式的值初始化变量(如果要初始化就用auto了 ...

  2. Python实现加密压缩成RAR或ZIP文件

    博主在前两篇博文分别介绍了加密RAR文件的解压https://www.cnblogs.com/kangbazi666/p/13646308.html和加密ZIP文件的解压https://www.cnb ...

  3. 吴恩达《深度学习》-第三门课 结构化机器学习项目(Structuring Machine Learning Projects)-第一周 机器学习(ML)策略(1)(ML strategy(1))-课程笔记

    第一周 机器学习(ML)策略(1)(ML strategy(1)) 1.1 为什么是 ML 策略?(Why ML Strategy?) 希望在这门课程中,可以教给一些策略,一些分析机器学习问题的方法, ...

  4. 关于CountDownLatch、CyclicBarrier和Semaphore

    这次工作使用CountDownLatch来将异步的通信改成同步 扩散了解下其他两种 Java并发编程:CountDownLatch.CyclicBarrier和Semaphore 在java 1.5中 ...

  5. centos7 yum安装redis及常用命令

    redis是什么 Redis是一种基于内存的数据结构存储,可持久化的日志型.Key-Value数据库.使用关系型数据库的站点达到一定并发量的时候,往往在磁盘IO上会有瓶颈,这时候配合redis就有一定 ...

  6. 预科班D11

    2020.09.21星期一 预科班D11 学习内容: 一.基本数据类型及内置方法 1.整形int及浮点型float + - * / // ** % > < >= <= 2.字符 ...

  7. 实现队列的基本操作(数据结构)-python版

    class Queue: def __init__(self): self.entries = [] self.length = 0 self.front = 0 def put(self, item ...

  8. 【转】postgreSQL​之autovacuum性能问题分析(一)

    最近笔者在项目中遇到postgreSQL的性能问题,所以计划在公众号里写一个系列文章去追踪记录这些问题以及分析过程或解决方法. 本文主要是关于postgreSQL的autovacuum的问题.可能很多 ...

  9. UCanCode发布升级E-Form++可视化源码组件库2020全新版 !

    2020年. 中国.成都 UCanCode发布升级E-Form++可视化源码组件库2020全新版 ! --- 全面性能提升,UCanCode有史以来最强大的版本发布! E-Form++可视化源码组件库 ...

  10. Spring Eureka 本地Docker集群部署

    故事背景 最近因为产线使用的服务与发现服务,使用的是Spring Cloud Eureka集群部署,为了以后调试产线的问题,想在本地搭建和产线一样的环境.产线的所有服务都是基于K8s和Docker部署 ...