《Spring敲门砖之基础教程第一季》 第一章(2)解读Spring Framework

系统架构

一个成功的项目离不开一个好的架构,一个好的架构自然需要一位好的设计师, Rod Johnson正是Spring的前生总架构设计师,那么spring有哪些模块,我们看一下由spring官方给出的一张图就一目了然了。

图 1.1 Overview of the Spring Framework

它总共包含了大约20个小的模块,这些小模块根据功能又划分成几个大模块,具有高内聚低耦合的特质,这些大模块依次分为Core Container(核心容器),Data Access/Integration(数据访问和集成), Web, AOP (面向方面编程), Instrumentation(设备基础设施), Messaging(报文协议解析), 测试模块, 功能涵盖了我们日常的所有开发。

解剖模块

  • Core Container:

这一部分可以说是spring的心脏,它支撑着各个子模块的运行,Core包含了spring基础IOC和依赖注入,Beans是BeanFactory接口的具体实现,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正的允许你从程序逻辑中分离出依赖关系和配置,Context基于前面的两个模块集成于Beans特性,提供bean的使用和生命周期的管理,常用的接口如ApplicationContext就是来获取我们需要使用的Bean,SPEL是spring提供在容器里使用的表达式,类似JSP页面的EL,JSTL,但是它结合了Bean注入具有更加强大的功能如计算,动态加载,包括后面使用aop声明式事务管理等。

  • Data Access/Integration:

数据操作模块,这里包含封装了原始的JDBC基础模块,用于消除以往的冗余的数据库连接编码(隐约记得好像是5个固定代码来获取数据连接),它提供了JDBC的一个抽象层,提供了通用的数据库厂商代码;ORM模块是我们目前使用最普遍的一个模块,它提供了对象-关系映射API,即把传统的Bean对象映射为数据库对象,常见的有JPA、JDO、Hibernate、iBatis等框架。利用ORM封装包,可以混合使用所有Spring提供的特性进行O/R映射。如前边提到的简单声明性事物管理。OXM模块,该模块提供了一个对Object/XML映射实现的抽象层,Object/XML映射实现包括JAXB、Castor、XMLBeans、JiBX和XStream。JMS模块JMS(Java Messaging Service)是一个消息服务模块,它负责创建创建消息的消费者和生产者,依据JMS规范而产生的,类似的消息中间件还有ActiveMq,Kafka等。Transaction模块用于支持编程和声明性的事物管理,这些事物类必须实现特定的接口,并且对所有的POJO都适用。

  • Web:

它包含了我们开发web项目的一些模块,web模块提供了基础的面向web的集成特性。例如多文件上传、使用servlet listeners初始化IoC容器以及一个面向web的应用上下文。它还包含Spring远程支持中web相关部分。Servlet也就是我们常用的spingMVC servlet模块,它提供了一个强大的前端mvc模式,用于web应用,支持restful web service的调用,相对于structs显得方便许多。WebSocket是用于server端同页面浏览器端通讯的一个重要工具,portlet则是spring提供的另一类mvc开发模式,它也是基于容器的,具体的实现方式不相同,感兴趣的同学可以去对比一下。

  • AOP和Instrumentation

AOP模块提供了一个符合AOP联盟标准的面向切面编程的实现,它让你可以定义,例如方法拦截器和切点,从而将逻辑代码分开,降低它们之间的耦合性,抽取一些公共的东西出来,可以更好的代码复用。利用source-level的元数据功能,还可以将各种行为信息合并到你的代码中,这有点像.net中的attribute的概念 , Aspects模块提供了对AspectJ的集成支持。Instrumentation模块提供了class instrumentation支持和classloader实现,使得可以在特定的应用服务器上使用。Spring在JVM代理库spring-agent.jar中使用InstrumentationSavingAgent来保存由JVM提供的Instrumentation接口的当前实例。DefaultContextLoadTimeWeaver将会自动检测跟应用环境匹配得最好的LoadTimeWeaver实例。

  • Test

Test测试模块支持使用JUnit和TestNG对Spring组件进行测试。我们平时运行需要加载spring环境容器的时候可以通过注解或者直接配置,将spring的配置文件加载到当前运行环境,就可以进行测试了。

模块目录

下面列出了各功能模块所在的package,后面章节我们会根据实际的项目使用演示代码,并且解析原理。

GroupId

ArtifactId

Description

org.springframework

spring-aop

Proxy-based AOP support

org.springframework

spring-aspects

AspectJ based aspects

org.springframework

spring-beans

Beans support, including Groovy

org.springframework

spring-context

Application context runtime, including scheduling and remoting abstractions

org.springframework

spring-context-support

Support classes for integrating common third-party libraries into a Spring application context

org.springframework

spring-core

Core utilities, used by many other Spring modules

org.springframework

spring-expression

Spring Expression Language (SpEL)

org.springframework

spring-instrument

Instrumentation agent for JVM bootstrapping

org.springframework

spring-instrument-tomcat

Instrumentation agent for Tomcat

org.springframework

spring-jdbc

JDBC support package, including DataSource setup and JDBC access support

org.springframework

spring-jms

JMS support package, including helper classes to send and receive JMS messages

org.springframework

spring-messaging

Support for messaging architectures and protocols

org.springframework

spring-orm

Object/Relational Mapping, including JPA and Hibernate support

org.springframework

spring-oxm

Object/XML Mapping

org.springframework

spring-test

Support for unit testing and integration testing Spring components

org.springframework

spring-tx

Transaction infrastructure, including DAO support and JCA integration

org.springframework

spring-web

Web support packages, including client and web remoting

org.springframework

spring-webmvc

REST Web Services and model-view-controller implementation for web applications

org.springframework

spring-webmvc-portlet

MVC implementation to be used in a Portlet environment

org.springframework

spring-websocket

WebSocket and SockJS implementations, including STOMP support

总结

本节介绍spring framwork的系统架构组成,从大模块到小模块一一剖析了它的概念和使用场景,其中orm,web使我们常见的模块,然后给出了各个功能所处的package,这样我们用到什么功能就去哪个目录下查找,后面我们会一次展开功能的介绍并进行实践。

参考资料

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#overview

http://blog.csdn.net/liou825/article/details/18700143

声明:

本文介绍纯属个人观点,如果不对的地方欢迎批评指正,让我们共同进步,朝着正确的方向前进。如果您喜欢本文请关注下面公众账号获取最新文章,您的支持是我前行的动力。

原文发布于微信公众号 - 架构师之旅(TravelWithFrame)

原文发表时间:2016-08-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏运维一切

xfs的故障记录

##前言 我使用xfs比较二一点,我是在ceph的rbd上直接格式化的xfs,所以ceph上的数据一般不会丢失,不过我的xfs是在docker内部进行的挂载,使...

2003
来自专栏程序员互动联盟

【专业知识】java学习中的13个核心技术

1. JDBC(Java Database Connectivity): JDBC API为访问不同的数据库提供了一种统一的途径象ODBC一样,JDBC对开发...

37413
来自专栏Java职业技术分享

一个老程序员是如何手写Spring MVC的?「附代码」

人见人爱的Spring已然不仅仅只是一个框架了。如今,Spring已然成为了一个生态。但深入了解Spring的却寥寥无几。这里,我带大家一起来看看,我是如何手写...

1000
来自专栏java思维导图

微服务架构的服务与发现-Spring Cloud

简单来说,服务化的核心就是将传统的一站式应用根据业务拆分成一个一个的服务,而微服务在这个基础上要更彻底地去耦合(不再共享DB、KV,去掉重量级ESB),并且强调...

1025
来自专栏Web项目聚集地

从零学习Spring(一)

今天我们便踏上Spring框架的学习之路,熟悉此公众号的读者知道,公众号正在连载关于MyBatis,Spring MVC,Spring Boot框架的教程。如果...

3511
来自专栏程序猿DD

在Pivotal Web Service上发布Spring Boot应用

Hello Pivotal Web Service是由 Pivotal 公司提供的 ,可以运行Java, Grails, Play, Spring, Node....

37613
来自专栏chenssy

【死磕Netty】-----Netty的核心组件

原文出处http://cmsblogs.com/ 『chenssy』 转载请注明原创出处,谢谢! 在第一篇博客中(【死磕Netty】-----NIO基础详解),...

5195
来自专栏杨建荣的学习笔记

关于内存异常的一个猜想(r4笔记第43天)

今天查看生产某个服务器的负载的时候,发现内存的使用情况有些异常。 top - 12:00:08 up 15 days, 12:04, 13 users, lo...

2857
来自专栏格子的个人博客

Jenkins系列一:安装和简单配置Jenkins简单介绍Jenkins安装

Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

1831
来自专栏一个会写诗的程序员的博客

Gatling : 次时代性能测试利器

Gatling作为一款开源免费的性能测试工具越来越受到广大程序员的欢迎。免费当然是好的,最缺钱的就是程序员了;开源更好啊,缺啥功能、想做定制化的可以自己动手,丰...

1112

扫码关注云+社区