本文源码:GitHub·点这里 || GitEE·点这里前端
一、框架概述java
Spring是一个开源框架,框架的主要优点之一就是其分层架构,分层架构容许使用者选择使用哪个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成之前只可能由EJB完成的事情。Spring是一个分层的轻量级开源框架。git
基本特性:分层架构、高内聚低耦合、支持AOP编程、事务管理、集成测试、集成各类框架。github
二、核心组件算法
核心容器:包含Bean的建立、配置、管理等功能。spring
AOP切面编程:能够帮助应用程序解耦。sql
数据访问:集成了JDBC,经常使用的Dao层框架hibernate,mybatis等。数据库
Web编程:集成流程的MVC框架,实现界面逻辑和应用程序分离。编程
三、Bean对象理解后端
Spring容器负责建立,装配,设置属性,进而管理整个生命周期的对象,称为Bean对象。
装配方式:XML格式、注解扫描、Java代码装配。
做用域:用于肯定spring建立bean实例个数,好比单例Bean,原型Bean。singleton默认单例、prototype多例、request请求、session会话级、global-session。
生命周期:实例化,属性加载,初始化先后管理,销毁。
四、经常使用核心注解
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默认是单例的,默认名称是类名且首字母小写。
五、IOC与DI思想
IOC容器
Java系统中对象耦合关系十分复杂,系统的各模块之间依赖,微服务模块之间的相互调用请求,都是这个道理。下降系统模块之间、对象之间、微服务的服务之间耦合度,是软件工程核心问题之一。由于Spring框架中核心思想就是IOC控制反转,用来实现对象之间的解耦。
依赖注入
IOC给对象直接创建关系的动做,称为DI依赖注入(Dependency Injection);依赖:对象A须要使用对象B的功能,则称对象A依赖对象B。注入:在对象A中实例化对象B,从而使用对象B的功能,该动做称为注入。
六、Aop切面编程
经过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。核心做用:能够对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度下降,提升程序的复用性和开发效率。AOP提供了取代继承和委托的一种新的方案,并且使用起来更加简洁清晰,是软件开发中的一个热点理念。
实现方式:JDK动态代理、CgLib字节码加强、Spring半自动代理、Spring全自动代理。
七、事务管理
事务是指做为单个逻辑工做单元执行的一系列操做(SQL语句)。这些操做要么所有成功,要么所有不成功。Spring事务管理的本质就是封装了数据库对事务支持的操做,使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务的提交和回滚。
核心API封装
PlatformTransactionManager:平台事务管理器,Spring管理事务,必须使用事务管理器进行事务配置时,核心方法:获取事务,提交事务,回滚事务。
TransactionDefinition:该对象封装事务详情(事务定义、事务属性),例如:隔离级别、是否只读、超时时间 等。
TransactionStatus:用于记录当前事务运行状态。例如:是否有保存点,事务是否完成。Spring底层根据状态进行相应操做。
八、配置文件
在Spring的配置文件中,一般会配置下列核心内容;
在实际开发中,复杂的项目配置十分繁杂且很差管理,可能项目中涉及不一样环境的配置文件都有几十个,所在在SpringBoot框架中采用统一约定的方式简化。
九、环境整合SSM、SSH
Spring框架聚合很强的整合能力,例如常见的整合Mybatis,Mvc,Hibernate,Redis等系列组件,为开发环境的集成提供很大的便利,总体职责上分为几层:控制层、业务逻辑层、数据持久层、域模块层、中间件层,以帮助开发人员在短时间内搭建结构清晰、可复用性好、维护方便的Web应用程序。
十、设计模式
单例模式:Spring框架中Bean对象的管理,默认单例,也能够显式标识为多例模式。
工厂模式:经过对应的工厂来生成类的对象,这种设计方式符合“开闭”原则。Spring框架中BeanFactory和Bean的用法。
适配器模式:SpringMvc执行控制中,前段控制器DispatcherServlet调用处理器适配器去执行Handler,处理器适配器去执行Handler,给适配器返回ModelAndView。
责任链模式:DispatcherServlet核心方法doDispatch。HandlerExecutionChain只是维护HandlerInterceptor的集合,能够向其中注册相应的拦截器,自己不直接处理请求,将请求分配给责任链上注册处理器执行,下降职责链自己与处理逻辑之间的耦合程度。
一、Mvc模式理念
SpringMVC是一种基于Java实现的MVC设计模式的请求驱动类型的轻量级Web框架,出自Spring框架全家桶,与Spring框架无缝整合,使用了MVC架构模式的思想,将Web层进行职责解耦。结构松散,几乎能够在SpringMVC中使用各种视图,各个模块分离并且耦合度很是低,且易于扩展。与Spring无缝集成,且简单,灵活,容易上手。
二、执行流程
发起请求到前端控制器DispatcherServlet;前端控制器请求HandlerMapping查找,Handler能够根据xml配置、注解进行查找;
处理器映射器HandlerMapping向前端控制器返回Handler;前端控制器调用处理器适配器去执行Handler;处理器适配器去执行Handler;
Handler执行完成给适配器返回ModelAndView;处理器适配器向前端控制器返回ModelAndView,ModelAndView是springmvc框架的一个底层对象,包括Model和view;
前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图;视图解析器向前端控制器返回View;前端控制器进行视图渲染,视图渲染将模型数据(在ModelAndView对象中)填充到request域中;前端控制器向用户响应结果;
三、核心组件
前端控制器:请求离开浏览器后,最早到达的就是DispatcherServlet,是整个流程控制的中心。
处理器映射器:根据请求的url路由到指定接口,用户请求找到Handler处理器。
处理器适配器:按照特定规则去执行Handler,支持多种处理器,各类处理器中的处理方法各不相同。
处理器:处理用户请求,涉及具体业务逻辑,须要根据业务需求开发。
视图解析器:将请求的响应结果生成View,根据逻辑视图名解析成物理视图名,就是具体页面地址。
视图:Mvc框架提供不少的View视图类型的支持,包括:jsp、freemarker、pdf等。
四、参数处理
requestParam:主要用于在SpringMvc框架的控制层获取参数,三个经常使用参数:defaultValue表示设置默认值,required 经过boolean设置是不是必需要传入的参数,value值表示传入的参数名称。
RequestBody:接收请求体中传递给后端的Json字符串数据的,GET方式无请求体,因此使用@RequestBody接收数据时,不能使用GET方式提交数据,须要用POST方式进行提交。
ResponseBody:该注解用于方法的返回对象,能够经过配置转换器为指定数据响应格式,若是但愿返回的数据不是View试图页面,而是指定数据格式的时候使用,例如:Json、Xml等。
五、整合Spring框架
六、对比WebFlux
响应式编程是一种基于数据流和变化传递的声明式的编程范式,WebFlux是Web控制端响应式编程中的组成部分,在Spring官网上有说明,不是为了替代SpringMvc,是用来提供更多场景的解决方案。
一、经常使用基础功能
二、整合数据源
三、集成经常使用中间件
整个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·点这里 | ☆☆☆☆☆ |