Spring篇:什么是Spring

Spring框架

1、 什么是Spring

Spring是目前主流的Java Web开发框架,是分层的Java SE/EE一站式轻量级开源框架,以IoC(Inverse of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为内核。

1.1 Spring全家桶

Spring自诞生以来一直备受青睐,它包括许多框架,例如Spring framework、SpringMVC、SpringBoot、Spring Clound、Spring Data、Spring Security等,所以有人将它们亲切地称之为:Spring全家桶。

  • Spring framework:也就是我们经常说的spring框架,包括了IoC依赖注入,Context上下文,Bean管理,SpringMVC等众多功能模块,其他的Spring框架比如spring boot也会依赖于Spring framework。

  • Spring boot:它的目标是简化Spring应用和服务的创建、开发与部署,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用的微服务功能,可以和spring clound联合部署。Spring Boot的核心思想是约定大于配置,应用只需要很少的配置即可,简化了应用开发模式。

  • Spring Data:是一个数据访问及操作的工具集,封装了多种数据源的操作能力,包括:jdbc、Redis、

  • Spring Cloud:是一整套完整的微服务解决方案,是一系列不同功能的微服务框架的集合,Spring Cloud基于Spring Boot,简化了分布式系统的开发,继承了服务发现、配置管理、消息总线、负载均衡、断路器、数据监控等各种服务治理能力。比如sleuth提供了全链路追踪能力,Netfix套件提供了hystrix熔断器、zuul网关等众多的治理组件。config组件提供了动态配置能力,bus组件支持使用RabbitMQ、kafka、Activemq等消息队列,实现分布式服务之间的时间通信。

  • Spring Security:主要用于快速构建安全的应用程序和服务,在Srping Boot和Spring Security OAuth2的基础上,可以快速实现常见安全模型,如单点登录,令牌中继和令牌交换。oauth2授权机制和jwt认证方式的关系:oauth2是一种授权机制,规定了完备的授权、认证流程;JWT全称是JSON Web Token,是一种把认证信息包含在token中的认证实现,oauth2授权机制中就可以应用jwt来作为认证的具体实现方法。

1.2 MVC框架

在MVC模式中,M是指业务模型,V是指用户界面,C则是控制器。MVC框架指MVC模式的某种框架,它强制性地使应用程序的输入、处理和输出分开。使用MVC应用程序被分为三个核心部件:模型、视图、控制器。其中模型负责内部数据模型,控制器负责请求的分发控制,视图负责返回给用户展示的视图。

常见的MVC框架包含:

  • JSP + javabean + servlet

  • SSH:Structs2、Spring、Hibernate

  • SSM:SpringMVC、Spring、Mynatis

其中SSH组合已经逐渐被SSM组合替代,一方面原因是structs对几次安全漏洞的处理,让大家对structs的信息受到影响;另一方面,Spring MVC更加地灵活,不需要额外配置,不存在和Spring整合等问题,使用更加方便。

1.3 一些基本概念

1.3.1 Ioc(Inversion of control) 控制反转

控制权由对象本身转向容器,容器根据配置文件创建实例并创建各个实例之间的依赖关系。

即控制权的转移,将我们创建对象的方式反转了,以前对象的创建是由我们开发人员自己维护,包括依赖关系也是自己注入。使用spring之后,可以由spring完成对象的创建和关系的注入。反转控制就是反转了对象的创建方式,从我们自己创建反转给了程序创建。

1.3.2 AOP(Aspect Oriented Programming)

也就是面向方面编程的技术。AOP基于IoC的基础,是OOP的有益补充。

“一般而言,我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。”

“这样看来,AOP其实只是OOP的补充而已。OOP从横向上区分出一个个的类来,而AOP则从纵向上向对象中加入特定的代码。有了AOP,OOP变得立体了。如果加上时间维度,AOP使OOP由原来的二维变为三维了,由平面变成立体了。从技术上来说,AOP基本上是通过代理机制实现的。”

“AOP在编程历史上可以说是里程碑式的,对OOP编程是一种十分有益的补充。”

“面向方面编程就是一种让人在需要的时候随意地加入代码的方式,是一种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想。”

1.3.3 DI Dependency Injection 依赖注入

Spring这个容器中,替你管理着一系列的类,前提是你需要将这些类交给Spring容器进行管理,然后在你需要的时候,不是自己去定义,而是直接向spring容器直接索取,当spring容器知道你的需求之后,就会去它所管理的组件中进行查找,然后直接给你所需要的组件。

1.3.4 关于耦合性的思考

关于面向对象编程的三大特征:封装、继承、多态。继承的好处是抽取了重复代码,加强了类之间的联系,但坏处也是加大了耦合性。面向对象编程追求高内聚,低耦合,那么耦合性高有什么不好?我举个例子。

当你有个实例--轮子,这个轮子是个独立模块,你调用它就可以跑,里面要改什么都很方便。 当你有个继承自生物类->哺乳类->狗->哈士奇的实例,或许父类中定义好了方法(譬如跑、吃饭……)可以很方便地继承,但是哪天你想给哈士奇这个类增加(睡觉)的方法,你就要往上考虑怎么改,改狗类?狗类下其他子类怎么改?改哺乳类?哺乳类的子类怎么改?哺乳类的子类的子类怎么改?改了会有什么问题?……这就是高耦合性。

有时候你会觉得继承给你提供了方便,但是耦合性太高也会引发各种问题。一个低耦合的独立模块你想改什么拆下来改改,只要原有的方法依旧能跑通,装回去就能继续用。高耦合性的模块之间的更改则要慎重得多。

1.4 Spring框架的特点

  • 方便解耦,简化开发:Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给Spring管理。

  • 方便集成各种优秀框架:其内部提供了对各种优秀框架(如Structs2、Hibernate、MyBatis等)的直接支持。

  • 降低Java EE API的使用难度:Spring对Java EE开发中非常难用的一些API(JDBC、JavaMail、远程调用等)都提供了封装、使这些API应用的难度大大降低。)

  • 方便程序的测试:Spring支持Junit4,可以通过注解方便地测试Spring程序。

  • AOP编程的支持:Spring提供面向切面编程,可以方便地实现对程序进行权限拦截和运行监控等功能。

  • 声明式事务的支持:只需要通过配置就可以完成对事务的管理,而无需手动编程。

2 Spring体系结构

参考Spring体系结构

Spring框架采用分层的理念,根据功能的不同划分成多个模块,这些模块大体可分为Data Access/Integration(数据访问与继承)、Web、AOP、Aspects、Instrumentation(检测)、Messaging(消息处理)、Core Container(核心容器)和Test。如下图所示(以下是Spring Framework 4.x版本后的系统架构图)。

上图包含了Spring框架的所有模块,这些模块可以满足一切企业级应用开发的需求,在开发过程中可以根据需求有选择地使用所需要的模块。下面分别对这些模块的作用进行简单介绍。

2.1 Data Access/Integration(数据访问/集成)

数据访问/集成层包括JDBC、ORM、OXM、JMS和Transactions模块。具体介绍如下。

  • JDBC模块:提供了一个JBDC的样例模板,使用这些模板能消除传统冗长的JDBC编码还有必须的事务控制,而且能享受到Spring管理事务的好处。

  • ORM模块:提供与流行的“对象-关系”映射框架无缝集成的API,包括JPA、JDO、Hibernate和MyBatis等。而且还可以使用Spring事务管理,无需额外控制事务。

  • OXM模块:提供了一个支持Object/XML映射的抽象层实现,如JAXB、Castor、XMLBeans、JiBX和XStream。将Java对象映射成XML数据,或者将XML数据映射成Java对象。

  • JMS模块:指Java消息服务,提供一套“消息生产者、消息消费者”末班用于更加简单的使用JMS,JMS用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

  • Transactions事务模块:支持编程和声明式事务管理。

2.2 Web模块

Spring的Web层包括Web、Servlet、WebSocket和Portlet组件,具体介绍如下。

  • Web模块:提供了基本的Web开发集成特性,例如多文件上传功能、使用的Servlet监听器的IOC容器初始化以及Web应用上下文。

  • Servlet模块:提供了一个Spring MVC Web框架实现。Spring MVC框架提供了基于注解的请求资源注入、更简单的数据绑定、数据验证等及一套非常易用的JSP标签,完全无缝与Spring其他技术协作。

  • WebSocket模块:提供了简单的接口,用户只要实现响应的接口就可以快速的搭建WebSocket Server,从而实现双向通讯。

  • Portlet模块:提供了在Portlet环境中使用MVC实现,类似Web-Servlet模块的功能。

2.3 Core Container(Spring的核心容器)

Spring的核心容器是其他模块建立的基础,由Beans模块、Core核心模块、Context上下文模块和SpEL表达式语言模块组成,没有这些核心容器,也不可能有AOP、Web等上层的功能。

  • Beans模块:提供了框架的基础部分,包括控制反转和依赖注入

  • Core核心模块:封装了Spring框架的底层部分,包括资源访问、类型转换以及一些常用的工具类。

  • Context上下文模块:建立在Core和Beana模块的基础之上,继承Beans模块功能并添加资源绑定、数据验证、国际化、Java EE支持、容器生成周期、事件传播等。ApplicationContext接口是上下文模块的焦点。

  • SpEL模块:提供了强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从Spring容器获取Bean,它也支持列表投影、选择和一般的列表聚合等。

 

2.4 AOP、Aspects、Instrumentation和Messaging

在Core Container之上是AOP、Aspects等模块,具体介绍如下:

  • AOP模块:提供了面向切面编程实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态地把这些功能添加到需要的代码中,这样各司其职,降低业务逻辑和通用功能的耦合。

  • Aspects模块:提供与AspectJ的集成,是一个功能强大且成熟的面向切面编程(AOP)框架。

  • Instrumentation模块:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。

  • messaging模块:Spring 4.0 以后新增了消息(Spring-messaging)模块,该模块提供了对消息传递体系结构和协议的支持。

2.5 Test模块

Spring支持Junit和TestNG测试框架,而且还额外提供一些基于Spring的测试功能,比如在测试Web框架时,模拟Http请求的功能。

 

参考

Spring详解(概述、组件详解、加载流程)

Spring框架总结【无比详细】

Spring框架入门教程

Java中最强大的框架spring

Spring框架详解

【Spring】详解Spring全家桶

struts和struts2的区别

SSH和SSM区别

 

碎碎念:有时候做一件事情并不一定花费太多时间,尤其在你坚决不碰手机的前提下

posted @ 2021-07-25 16:51  l.w.x  阅读(1027)  评论(0编辑  收藏  举报