本文源码: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·点这里 | ☆☆☆☆☆ |