文档章节

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

宋建国
 宋建国
发布于 2016/08/12 22:11
字数 1698
阅读 18
收藏 0

回顾        

上一节我们简单介绍了sping的一些基本概念以及它的一些特性,核心功能AOP,IOC等,这一节我们来聊聊spring框架的构成部件。

系统架构

        一个成功的项目离不开一个好的架构,一个好的架构自然需要一位好的设计师,  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

声明:

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

© 著作权归作者所有

共有 人打赏支持
宋建国
粉丝 13
博文 127
码字总数 14847
作品 0
闸北
深入浅出Dubbo剖析出视频教程了!!!

深入浅出Dubbo剖析出视频教程了,目前出了Dubbo剖析-基础教程,本课程作为深入浅出Dubbo课程系列的基础篇,内容如下: 第一章 初始Dubbo(免费) 第二章 使用 ZooKeeper 搭建服务治理中心 第...

阿里加多
05/04
0
0
Java基础教程:tutorialspoint-spring mvc

教程: 来自turorialspoint的Spring MVC 4.1.6教程(英文),官网:https://www.tutorialspoint.com/springmvc/index.htm 离线版本:(链接: https://pan.baidu.com/s/1hsvL7wS 密码: vg7x)......

easonjim
2017/08/28
0
0
Spring Boot基础教程 ( 一 ) :基础项目构建,引入web模块,完成一个简单的RESTful API

原文出处:didispace 简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试...

didispace
09/27
0
0
SpringBoot | 第一章:第一个SpringBoot应用

SpringBoot | 第一章:第一个SpringBoot应用 springboot简单介绍 概述 随着动态语言的流行(Ruby、Groovy、Scala、Node.js),Java的开发显得格外的笨重:繁多的配置、低下的开发效率、复杂的...

oKong
07/15
0
0
SpringBoot|第一章:第一个SpringBoot 应用

springboot简单介绍 概述 随着动态语言的流行(Ruby、Groovy、Scala、Node.js),Java的开发显得格外的笨重:繁多的配置、低下的开发效率、复杂的部署流程以及第三方技术集成难度大。 在上述...

Java架构解析
08/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
今天
2
0
OSChina 周五乱弹 —— 想不想把92年的萝莉退货

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @罗马的王:分享松澤由美的单曲《地球ぎ》 很久没看圣斗士星矢了 《地球ぎ》- 松澤由美 手机党少年们想听歌,请使劲儿戳(这里) @开源中国首...

小小编辑
今天
14
2
springBoot条件配置

本篇介绍下,如何通过springboot的条件配置,控制Bean的创建 介绍下开发环境 JDK版本1.8 springboot版本是1.5.2 开发工具为 intellij idea(2018.2) 开发环境为 15款MacBook Pro 前言 很多时候,...

贺小五
今天
1
0
javascript source map 的使用

之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大...

粒子数反转
昨天
1
0
谈谈如何学Linux和它在如今社会的影响

昨天,还在农耕脑力社会,今天已经人工智能技术、大数据、信息技术的科技社会了,高速开展并迅速浸透到当今科技社会的各个方面,Linux日益成为人们信息时代的到来,更加考验我们对信息的处理程...

linux-tao
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部