Spring 源码学习笔记(一) 整体架构

个人学习Spring源码系列 整体架构篇

源码地址 https://github.com/spring-projects/spring-framework


Spring的整体架构

Spring是一个分层框架,它包含大约20个模块,如下图所示: 

Spring各模块简介

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

含有JDBC、ORM、OXM、JMS、Transactions模块

JDBC

JDBC模块提供了一个JDBC抽象层,它可以消除冗长的JDBC编码和解析数据库厂商特有的错误代码,这个模块包含了Spring对JDBC数据访问进行封装的所有类

ORM

ORM模块为流行的对象-关系映射API,如JPA、JDO、Hibernate、MyBatis等,提供了一个交互层,利用ORM封装包,可以混合使用所有Spring提供的特性进行O/R映射,如前边提到的简单声明性事务管理

OXM

OXM(Object/XML Mapper)模块提供了一个Object/XML Mapper实现的抽象层。Object/XML Mapper实现包括XML Beans、XStream等等。

JMS

JMS(Java Messaging Service)模块包含了生产和消费消息的功能区。

Transactions

Transactions模块支持事务管理。

 

Web

Web层包含了Websocket、Servlet、Web、Porlet模块。

Websocket

目的是浏览器与服务端建立全双工的通信方式,解决http请求-响应带来过多的资源消耗,同时对特殊场景应用提供了全新的实现方式,比如聊天、股票交易、游戏等对对实时性要求较高的行业领域

Servlet

该模块提供了MVC实现

Web

该模块提供了基础的面向web的集成特性,如多文件上传,servlet listener。

Portlet

Portlet模块提供用于Portlet环境和Servlet模块的MVC的实现。

 

AOP

AOP(Aspect-Oriented Programming,面向切面编程),AOP模块提供了一个符合AOP联盟标准的面向切面编程的实现,它让你可以定义例如方法拦截器和切点,从而将逻辑代码分开,降低它们之间的耦合性,利用source-level的元数据功能,还可以将各种行为信息合并到你的代码中

Spring AOP模块为基于Spring的应用程序中的对象提供了事务管理服务,通过使用Spring AOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中
 

Aspects

Aspects模块为Spring框架提供了对AspectJ的支持。AspectJ是一个流行的AOP框架。

Instrumentation

Instrumentation模块提供了一定的应用服务器中使用类工具的支持和类加载器实现。

Messaging(消息)

Messaging是spring4新增加的模块,包含了一部分主要的基于message的应用的实现。

 

Core Container(核心容器)

核心容器Core Container层包含Beans、Core、Context、SpEL模块。其中Beans、Core模块是Spirng框架的基础部分,提供了控制反转(Inversion of Control,IoC)和依赖注入(Dependency Injection,DI)特性。

Beans

Beans模块是所有应用都要使用的,它包含访问配置文件、创建和管理Bean,以及IoC和DI相关的类。

Core

Core模块包括框架的核心工具类。其他模块都要依赖这个模块的功能。

Context

Context模块以Beans模块和Core模块为基础,提供一种类似于JNDI且以框架的方式来操作对象的方式。Context在Beans的基础上提供了国际化、事件传播、资源加载等功能。ApplicationContext接口是Context模块的关键。

SpEL

Spring Expression Language是一种很强大的expression language,支持在运行时查询和操作对象的属性。

Test

该模块使用JUnit和TestNG对Spirng组件进行测试。

 


为什么使用 Spring

Spring 可以使开发人员使用 POJOs 开发企业级的应用程序。只使用 POJOs 的好处是你不需要一个 EJB 容器产品,比如一个应用程序服务器,但是你可以选择使用一个健壮的 servlet 容器,比如 Tomcat 或者一些商业产品。

Spring 在一个单元模式中是有组织的。即使包和类的数量非常大,你只需要选择你需要的部分,而忽略剩余的那部分。

Spring 不会让你白费力气做重复工作,它真正的利用了一些现有的技术,像几个 ORM 框架、日志框架、JEE、Quartz 和 JDK 计时器,其他视图技术。

测试一个用 Spring 编写的应用程序很容易,因为 environment-dependent 代码被放进了这个框架中。此外,通过使用 JavaBean-style POJOs,它在使用依赖注入注入测试数据时变得更容易。

Spring 的 web 框架是一个设计良好的 web MVC 框架,它为 web 框架,比如 Structs 或者其他工程上的或者很少受欢迎的 web 框架,提供了一个很好的供替代的选择。

为将特定技术的异常(例如,由 JDBC、Hibernate,或者 JDO 抛出的异常)翻译成一致的, Spring 提供了一个方便的 API,而这些都是未经检验的异常。

轻量级的 IOC 容器往往是轻量级的,例如,特别是当与 EJB 容器相比的时候。这有利于在内存和 CPU 资源有限的计算机上开发和部署应用程序。

Spring 提供了一个一致的事务管理界面,该界面可以缩小成一个本地事务(例如,使用一个单一的数据库)和扩展成一个全局事务(例如,使用 JTA)。

 

核心概念

IoC

IoCInversion of Control ,意为控制反转。

Spring 最认同的技术是控制反转的依赖注入(DI)模式。控制反转(IoC)是一个通用的概念,它可以用许多不同的方式去表达,依赖注入仅仅是控制反转的一个具体的例子。

当编写一个复杂的 Java 应用程序时,应用程序类应该尽可能的独立于其他的 Java 类来增加这些类可重用可能性,当进行单元测试时,可以使它们独立于其他类进行测试。依赖注入(或者有时被称为配线)有助于将这些类粘合在一起,并且在同一时间让它们保持独立。

到底什么是依赖注入?让我们将这两个词分开来看一看。这里将依赖关系部分转化为两个类之间的关联。例如,类 A 依赖于类 B。现在,让我们看一看第二部分,注入。所有这一切都意味着类 B 将通过 IoC 被注入到类 A 中。

依赖注入可以以向构造函数传递参数的方式发生,或者通过使用 setter 方法 post-construction。由于依赖注入是 Spring 框架的核心部分,所以我将在一个单独的章节中利用很好的例子去解释这一概念。

Aop

Spring 框架的一个关键组件是面向方面的程序设计(AOP)框架。一个程序中跨越多个点的功能被称为横切关注点,这些横切关注点在概念上独立于应用程序的业务逻辑。有各种各样常见的很好的关于方面的例子,比如日志记录、声明性事务、安全性,和缓存等等。

在 OOP 中模块化的关键单元是类,而在 AOP 中模块化的关键单元是方面。AOP 帮助你将横切关注点从它们所影响的对象中分离出来,然而依赖注入帮助你将你的应用程序对象从彼此中分离出来。

Spring 框架的 AOP 模块提供了面向方面的程序设计实现,允许你定义拦截器方法和切入点,可以实现将应该被分开的代码干净的分开功能。我将在一个独立的章节中讨论更多关于 Spring AOP 的概念。

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值