本文源码: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测试框架入门–第1部分

    最新推出的主要Spring框架是Spring MVC测试框架,Spring Guys声称它是"一流的JUnit支持,可通过流畅的API测试客户端和服务器端Spring MVC代码" ...

  2. Spring MVC测试框架入门–第2部分

    这个迷你系列的第一个博客介绍了Spring MVC测试框架,并展示了其在单元测试Spring MVC Controller类中作为控制器而不是POJO进行单元测试的用途. 现在是时候讨论使用框架进行集 ...

  3. 14.6 Spring MVC 测试框架(翻译)

    14.6 Spring MVC 测试框架(每天翻译一点点) Spring MVC测试框架对 Spring MVC 代码提供一流的测试支持 ,它拥有一个 fluent API ,可以和JUnit, Te ...

  4. spring mvc + mybatis 框架搭建 ( idea + gradle)

    spring mvc + mybatis 框架搭建 idea + gradle 刚刚入门,只是个人见解,如有错误或者问题欢迎指出指正. 邮箱: [ wgh0807@qq.com ] 文章引用: [ap ...

  5. Spring MVC测试框架

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

  6. Spring MVC的框架组件

    Spring MVC的框架组件 DispatcherServlet:前端控制器 用户请求到达前端控制器,它相当于MVC中的C,dispatcherServlet没有处理业务的能力,它是整个流程的控制中 ...

  7. Spring MVC Boot Cloud 技术教程汇总

    转载自 Spring MVC & Boot & Cloud 技术教程汇总 昨天我们发布了Java成神之路上的知识汇总,今天继续. Java成神之路技术整理(长期更新) 以下是Java技 ...

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

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

  9. Spring MVC Boot Cloud 技术教程汇总(长期更新)

    昨天我们发布了Java成神之路上的知识汇总,今天继续. Java成神之路技术整理(长期更新) 以下是Java技术栈微信公众号发布的关于 Spring/ Spring MVC/ Spring Boot/ ...

最新文章

  1. hdu2068RPG的错排
  2. numpy 下的数据结构与数据类型的转换(np.array vs. np.asarray)
  3. ITK:在图像中线性插值位置
  4. 与WebXR共同创建者Diego Marcos一起探讨沉浸式Web的未来(下)
  5. 标志寄存器EFLAGES
  6. 【Verilog HDL学习之路】第一章 Verilog HDL 数字设计总论
  7. [转]OpenMP 入门指南
  8. three.js加入监控
  9. 华为鸿蒙os什么时候发布,鸿蒙OS将于今天发布
  10. 关于智能制造的思考——以中航工业为例
  11. Scale-up and Scale-out
  12. php在线拍照代码,JQ+PHP实现浏览器webcam摄像头在线定时自动拍照存储照片
  13. 微信小程序 计算导航高度、设置浮层位置
  14. MGV2000_CW、JL、JZ、KA/KX、CNTV,零配置_S905L-B_全套固件(可救砖)
  15. Openwrt Web gui LUCI 流程浅析
  16. 制动电阻 DF8B型机车电阻制动装置-奥创电子
  17. Module not found: Error: Can‘t resolve ‘vue‘ in ‘C:\Users\86135\Desktop\webpack-vue\Vue\src\js‘
  18. jquery getJSON不执行问题解决
  19. deepin20系统选择手动安装盘_拯救老Macbook Air笔记本经验分享,用优盘安装最新苹果系统...
  20. 如何从小白起步成为百万博主|配音运营工具必不可少

热门文章

  1. (软件工程复习核心重点)第六章实现和测试-第二节:软件测试基础
  2. Linux系统编程4:入门篇之最强编辑器vim的使用攻略
  3. NTA告警引发的dll劫持思考(溯源)
  4. notepad++以16进制查看文件
  5. 并不对劲的noip2018
  6. Python学习笔记--8.6 函数--递归
  7. ADOCE打包到WinCE NK.bin镜像中
  8. 电信版iPhone 4S最低套餐49元
  9. 终于有人把卷积神经网络(CNN)讲明白了
  10. STM32之I2C原理