文档章节

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

宋建国
 宋建国
发布于 2016/08/12 22:11
字数 1698
阅读 15
收藏 0
点赞 0
评论 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
博文 126
码字总数 10019
作品 0
闸北
深入浅出Dubbo剖析出视频教程了!!!

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

阿里加多 ⋅ 05/04 ⋅ 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

程序猿DD/swagger-butler

Swagger Butler Swagger Butler是一个基于Swagger与Zuul构建的API文档汇集工具。通过构建一个简单的Spring Boot应用,增加一些配置就能将现有整合了Swagger的Web应用的API文档都汇总到一起,...

程序猿DD ⋅ 05/25 ⋅ 0

spring boot简单实现rest服务

问题 最开始我是想使用Spring MVC搭建一个简单的REST服务,去官网看了看教程,现在Spring胆越来越大了,需要我集成一个maven的父项目,我并不愿意继承Spring的父项目。然后,就开始下面的探索...

亚林瓜子 ⋅ 06/12 ⋅ 0

Spring Framework 5.0.7 和 4.3.18 发布

Spring Framework 5.0.7 和 4.3.18 发布了,Spring Framework 5.0.7包含39个修复和选定的改进,而Spring Framework 4.3.18包含15个修复和选定的改进。这些是本周晚些时候即将发布的Spring Bo...

淡漠悠然 ⋅ 06/13 ⋅ 1

Spring Cloud入门教程(十):消息总线(Bus)

Spring Cloud入门教程系列: Spring Cloud入门教程(一):服务治理(Eureka) Spring Cloud入门教程(二):客户端负载均衡(Ribbon) Spring Cloud入门教程(三):声明式服务调用(Feign) Spring Cl...

CD826 ⋅ 05/22 ⋅ 0

Spring Boot开启的 2 种方式

Spring Boot依赖 使用Spring Boot很简单,先添加基础依赖包,有以下两种方式 1. 继承spring-boot-starter-parent项目 2. 导入spring-boot-dependencies项目依赖 Spring Boot依赖注意点 1. 属...

Java技术栈 ⋅ 06/10 ⋅ 0

Spring Boot 2.0 新特性解读

点击上方“程序员小灰”,选择“置顶公众号” 有趣有内涵的文章第一时间送达! 本文转载自公众号 InfoQ 作者|翟永超编辑|郭蕾Spring Boot 2.0 来啦,有哪些新特性?升级吗?写在前面 北京时...

bjweimengshu ⋅ 04/13 ⋅ 0

从官网下载Spring Framework包

进入spring官网,官网地址 点击导航栏的 PROJECTS 选择 SPRING FRAMEWORK 选择 github 图标 往下拉,找到 Access to Binaries ,点击其中的 Spring Framework Artifacts 往下拉,找到 Spring...

影狼 ⋅ 06/14 ⋅ 0

Spring Boot功能实战

添加web功能启动器 添加了Spring Boot基础依赖后,如要使用web mvc功能,只需要添加如下启动器即可,Spring Boot会自动装配web功能。 添加启动类 然后添加启动类,建议放在根包下,这里把Con...

Java技术栈 ⋅ 06/10 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从零开始搭建Risc-v Rocket环境---(1)

为了搭建Rocke环境,我买了一个2T的移动硬盘,安装的ubuntu-16.04 LTS版。没有java8,gcc是5.4.0 joe@joe-Inspiron-7460:~$ java -version程序 'java' 已包含在下列软件包中: * default-...

whoisliang ⋅ 23分钟前 ⋅ 0

大数据学习路线(自己制定的,从零开始学习大数据)

大数据已经火了很久了,一直想了解它学习它结果没时间,过年后终于有时间了,了解了一些资料,结合我自己的情况,初步整理了一个学习路线,有问题的希望大神指点。 学习路线 Linux(shell,高并...

董黎明 ⋅ 29分钟前 ⋅ 0

systemd编写服务

一、开机启动 对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件。 如果你想让该软件开机启动,就执行下面的命令(以httpd.service为例)。 ...

勇敢的飞石 ⋅ 31分钟前 ⋅ 0

mysql 基本sql

CREATE TABLE `BBB_build_info` ( `community_id` varchar(50) NOT NULL COMMENT '小区ID', `layer` int(11) NOT NULL COMMENT '地址层数', `id` int(11) NOT NULL COMMENT '地址id', `full_......

zaolonglei ⋅ 40分钟前 ⋅ 0

安装chrome的vue插件

参看文档:https://www.cnblogs.com/yulingjia/p/7904138.html

xiaoge2016 ⋅ 43分钟前 ⋅ 0

用SQL命令查看Mysql数据库大小

要想知道每个数据库的大小的话,步骤如下: 1、进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; 2、查询所有数据的大小: select concat(round(sum(da...

源哥L ⋅ 今天 ⋅ 0

两个小实验简单介绍@Scope("prototype")

实验一 首先有如下代码(其中@RestController的作用相当于@Controller+@Responsebody,可忽略) @RestController//@Scope("prototype")public class TestController { @RequestMap...

kalnkaya ⋅ 今天 ⋅ 0

php-fpm的pool&php-fpm慢执行日志&open_basedir&php-fpm进程管理

12.21 php-fpm的pool pool是PHP-fpm的资源池,如果多个站点共用一个pool,则可能造成资源池中的资源耗尽,最终访问网站时出现502。 为了解决上述问题,我们可以配置多个pool,不同的站点使用...

影夜Linux ⋅ 今天 ⋅ 0

微服务 WildFly Swarm 管理

Expose Application Metrics and Information 要公开关于我们的微服务的有用信息,我们需要做的就是将监视器模块添加到我们的pom.xml中: 这将使在管理和监视功能得到实现。从监控角度来看,...

woshixin ⋅ 今天 ⋅ 0

java连接 mongo伪集群部署遇到的坑

部署mongo伪集群 #创建mongo数据存放文件地址mkdir -p /usr/local/config1/datamkdir -p /usr/local/config2/data mkdir -p /usr/local/config3/data mkdir -p /usr/local/config1/l......

努力爬坑人 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部