Spring体系结构:七大核心模块详解

Spring体系结构:七大核心模块详解-mikechen

spring是一个非常优秀的java框架,99%的公司都在使用,spring算是必备技能,所以一定要掌握好@mikechen

Spring简介

Spring是一个基于控制反转IOC和面向切面编程AOP的轻量级开源框架。

Spring它是由一个叫做Rod Johnson的音乐学博士在2002年提出并创建的,他提出了著名的轮子理论,就是:不要重复发明轮子。

Spring之所以叫做Spring,就是它期望给软件行业带来一个春天,让我们的开发变得更加简单更加快速。

Spring致力于JavaEE应用各层的解决方案,是企业应用一站式开发很好的选择,在表现层它提供了Spring MVC以及整合Struts的功能,在业务逻辑层可以管理事务、记录日志等,在持久层可以整合Hibernate、Mybatis等框架。

虽然Spring贯穿表现层、业务逻辑层、持久层,但Spring并不是要取代那些已有的优秀框架,而是可以高度开放的与其它优秀框架无缝整合。

 

Spring优点

Spring体系结构:七大核心模块详解-mikechen

1.非侵入式设计

Spring是一种非侵入式(no-invasive)框架,它可以使应用程序代码对框架的依赖最小化。

2.方便解耦、简化开发

Spring是一个大工厂,可以将所有  对象的创建、依赖关系的维护 交给Spring容器管理,大大降低了组建之间的耦合。

3.IOC控制反转

IOC——Inversion of Control控制反转,指的是将对象的创建权交给 Spring 去创建。

使用 Spring 之前,对象的创建都是由我们自己在代码中new创建,而使用 Spring 之后。对象的创建都是给了 Spring 框架。

4.支持AOP

AOP面向切面编程,主要应用在比如:安全、事务、日志等,进行集中式管理,从而提高程序的复用性。

5.支持声明式事务处理

通过配置就可以完成对事务的管理,无需手动编程。

6.方便整合其它优秀框架

Spring可以与大多数框架无缝整合。

 

Spring体系结构

Spring框架至今已集成了20多个模块,这些模块分布在以下模块中:

  • 核心容器(Core Container)
  • 数据访问/集成(Data Access/Integration)层
  • Web层
  • AOP(Aspect Oriented Programming)模块
  • 植入(Instrumentation)模块
  • 消息传输(Messaging)
  • 测试(Test)模块

Spring体系结构如下图:

Spring体系结构:七大核心模块详解-mikechen

 

Spring七大功能模块

Spring有七大功能模块,分别是Spring Core,AOP,ORM,DAO,MVC,WEB,Context。

1.Spring Core核心容器

Spring的核心容器是其他模块建立的基础,有Spring-core、Spring-beans、Spring-context、Spring-context-support和Spring-expression(String表达式语言)等模块组成。

  • Spring-core模块:提供了框架的基本组成部分,包括控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)功能。
  • Spring-beans模块:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean。
  • Spring-context模块:建立在Core和Beans模块的基础之上,提供一个框架式的对象访问方式,是访问定义和配置的任何对象的媒介。ApplicationContext接口是Context模块的焦点。
  • Spring-context-support模块:支持整合第三方库到Spring应用程序上下文,特别是用于高速缓存(EhCache、JCache)和任务调度(CommonJ、Quartz)的支持。
  • Spring-expression模块:提供了强大的表达式语言去支持运行时查询和操作对象图。这是对JSP2.1规范中规定的统一表达式语言(Unified EL)的扩展。该语言支持设置和获取属性值、属性分配、方法调用、访问数组、集合和索引器的内容、逻辑和算术运算、变量命名以及从Spring的IOC容器中以名称检索对象。它还支持列表投影、选择以及常用的列表聚合。

核心容器提供Spring框架的基本功能,spring以bean的方式组织和管理Java应用的各个组件及其关系,spring使用BeanFactory来产生和管理Bean,是工厂模式的实现。

BeanFactory通过控制反转(IOC)模式将应用程序的配置和依赖性(类与类之间的关系)规范 与 实际的应用程序代码分开(尤指业务代码),从而降低了类与类之间的耦合度。

Spring体系结构:七大核心模块详解-mikechen

如果想更加深入了解SpringIOC的底层实现,请点击查看搞透IOC,Spring IOC看这篇就够了!

 

2.AOP面向切面编程

  • Spring-aop模块:提供了一个符合AOP要求的面向切面的编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以便干净地解耦。
  • Spring-aspects模块:提供了与AspectJ的集成功能,AspectJ是一个功能强大且成熟的AOP框架。

AOP的实现原理为动态代理技术

Spring体系结构:七大核心模块详解-mikechen

比如典型的AOP的应用场景:
Spring体系结构:七大核心模块详解-mikechen

  • 日志记录
  • 事务管理
  • 权限验证
  • 性能监测

Spring AOP 采用了两种混合的实现方式:JDK 动态代理和 CGLib 动态代理。

  • JDK动态代理:Spring AOP的首选方法。 每当目标对象实现一个接口时,就会使用JDK动态代理。目标对象必须实现接口
  • CGLIB代理:如果目标对象没有实现接口,则可以使用CGLIB代理。

如果想更加全面深入的了解AOP,请点击查看Spring AOP全面详解(超级详细)

3.Spring Context模块

Spring上下文是一个配置文件,向spring提供上下文信息,spring上下文包括企业服务。

4. Spring Web模块

Web层由Spring-web、Spring-webmvc、Spring-websocket和Portlet模块组成。

  • Spring-web模块:提供了基本的Web开发集成功能,例如多文件上传功能、使用Servlet监听器初始化一个IOC容器以及Web应用上下文。
  • Spring-webmvc模块:也称为Web-Servlet模块,包含用于web应用程序的Spring MVC和REST Web Services实现。Spring MVC框架提供了领域模型代码和Web表单之间的清晰分离,并与Spring Framework的所有其他功能集成。
  • Spring-websocket模块:Spring4.0以后新增的模块,它提供了WebSocket和SocketJS的实现。
  • Portlet模块:类似于Servlet模块的功能,提供了Portlet环境下的MVC实现。

5.Spring DAO模块

提供了一个JDBC的抽象层和异常层次结构,消除了烦琐的JDBC编码和数据库厂商特有的错误代码解析, 用于简化JDBC。

6.Spring ORM模块

Spring插入了若干个ORM框架,提供了ORM对象的关系工具,其中包括Hibernate,JDO和IBatisSQL Map等,所有这些都遵从Spring的通用事务和DAO异常层次结构

7.Spring MVC模块

Sping MVC框架是一个全功能的构建Web应用程序的MVC实现。

SpringMVC框架提供清晰的角色划分:控制器、验证器、命令对象、表单对象和模型对象、分发器、处理器映射和视图解析器,Spring支持多种视图技术。

Spring MVC 的工作流程:

Spring体系结构:七大核心模块详解-mikechen
(1) 客户端发送请求,请求到达 DispatcherServlet 主控制器。
(2) DispatcherServlet 控制器调用 HandlerMapping 处理。
(3) HandlerMapping 负责维护请求和 Controller 组件对应关系。 HandlerMapping 根据请求调用对应的 Controller 组件处理。
(4) 执行 Controller 组件的业务处理,需要访问数据库,可以调用 DAO 等组件。
(5)Controller 业务方法处理完毕后,会返回一个 ModelAndView 对象。该组件封装了模型数据和视图标识。
(6)Servlet 主控制器调用 ViewResolver 组件,根据 ModelAndView 信息处理。定位视图资源,生成视图响应信息。
(7)控制器将响应信息给用户输出。

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法