Spring 是一款用于简化企业级Java应用开发的分层开源框架,它有着强大的扩展、融合能力,善于将各种单层框架完美地糅合在一起,并建立一个完整体系,统一、高效地构造可提供企业级服务的应用系统。
优势主要在于:
Spring是一个分层非常清晰并且以来关系、责任定位非常明确的轻量级架构,主要分为8大模块:数据处理模块(Data Access/Integration)、Web模块、AOP(Aspect Oriented Programing)模块、Aspects模块、Instrumentation模块、Messageing模块、Core Container模块和Test模块。通过这些,达到了零侵入的轻量级框架。
模块分析
1.数据处理模块
模块由JDBC、Transaction、ORM、OXM和JMS等模块组成
JDBC模块提供了不需要编写冗长的JDBC代码和解析数据库厂商特有的错误代码的JDBC-抽象层
Transactions模块支持编程呢个和声明式事务管理
ORM模块提供了流行的Object-Relational Mapping(对象-关系映射)API集成层,包含JAP、JDO和Hibernate等ORM框架。Spring对ORM的支持和封装主要体现在三个方面:
OXM模块提供抽象层,用于支持Object/XML mapping(对象/XML映射)的实现,例如 JAXB、Castor、XMLBeans、JiBX和XStream等
JMS模块(Java Messageing Service)包含生产和消费信息的功能
2.Web模块
该模块由Web、WebSocket、Servlet和Portlet等模块组成
3.AOP模块
该模块是Spring的代理模块,也是Spring的核心模块,巧妙利用了JVM动态代理和CGLIB动态代理面向过程编程,来实现业务零侵入、低耦合的效果。为了确保Spring与其他AOP框架的互用性,Spring AOP模块支持基于AOP联盟定义的API,也就是Aspect模块,与Spring IoC模块相辅相成。其中,我们熟知且常用的事物管理就是利用SpringAOP模块实现的。Spring AOP模块及Spring良好的架构设计及扩展性,使Spring可以融合基本上所有的模块及其他框架,成为真正的集大成者。
4.Aspects模块
该模块提供了与AspectJ(功能强大且成熟的面向切面编程的框架)的集成,它扩展了Java语言,定义了AOP语法(俗称织入点语法),持有一个专门的编译器来生成遵守Java字节编码规范的Class文件,使用字节码生成技术来实现代码。
Spring自带AOP模块,并且集成了AspectJ框架,使原AspectJ使用者可以快速掌握Spring框架,这同样提现了Spring高融合的特性。
5.Instrumentation模块
该模块是Spring对其它容器的集成及对类加载器的扩展实现,其子模块Spring-instrument-tomcat
实现了Tomcat Instrumentation代理功能。
6.Messaging模块
该模块是从Spring集成项目(Message、MessageChannel、MessageHandler及其他基于消息应用的基础模块)中抽象出来的,类似于基于注解的SpringMVC编程模块,包含一系列消息与方法的映射注解。
7.Core Container模块
该模块(也叫Spring核心容器模块)是Spring的根基,有Beans、Core、Context、SpEL四个子模块组成,这四个子模块如下所述。
8.Test模块
该模块支持通过组合JUnit或TestNG来进行单元测试和集成测试,并且提供了MockObject(模仿对象)方式进行测试。在该模块中定义了注释,例如@ContextConfiguration、@WebApplication、@ContextHierarchy、@ActiveProfiles,可以被用作元注释来创建自定义注解并避免整个测试套件的重复构造。
Spring 领域模型有三种:
1.容器领域模型(Context模型): 也叫作上下文模型,是Spring的掌控域,对Spring核心领域模型进行生命周期管理,也可以将其称为Spring的服务域,因为它为整个应用服务。
2.核心领域模型(Bean模型):提现了Spring的一个核心理念,即一切皆Bean,Bean即一切。Bean是应用运行时可执行的最小函数式单元,可以是一个属性单元,也可以是Java中的一个函数对象,更倾向于一种对象式的为某种特殊行为而生的可服用的概念,不受职责或者大小的限制。例如Spring上下文是一个Bean,一个简单的描述型的对象也是一个Bean。Bean模型是Spring的核心服务实体域,是应用要操作的本身,是每个线程的真正执行者,也是整个会话生命周期的管理者,还是Spring对外暴露的核心视图。
3.代理领域模型(Advisor模型):Spring代理的执行依赖于Bean模型,但是Spring代理的生成、执行及选择依赖于Spring自身定义的Advisor模型,只有符合Advisor模型的定义,才能生成Spring代理。