一、Spring框架概览

Spring框架是一种轻量级、一站式解决企业级应用的解决方案。不仅如此,Spring的模块化的特点,可以使你只引用所需要的部分,而无需引用全部。你可以使用控制反转容器(IoC container)、Hibernate集成代码、JDBC抽象层。Spring支持事务管理声明、RMI或Web Service实现远程调用。它能够全部支持MVC框架的全部特性,且能显示集成AOP到代码中。

Spring的设计是非侵入式的(non-intrusive),即领域(domain)逻辑代码通常不依赖于框架本身。现在,已经有数据访问技术和Spring的库出现,来支持集成层(数据访问层),并且容易使用。

1.开始使用Spring

这一系列会包含Spring框架的全部特性的详细信息。如果想快速了解Spring,可以访问https://spring.io/guides 。

2.Spring框架介绍

Spring是一种java平台,其提供了丰富的基础组件(infrastructure),来支持java应用的开发。Spring提供了组件,可以让你更关注于应用本身。

2.1依赖注入(Dependency Injection)和控制反转(Inversion of Control)

先介绍一个小背景:Martin Fowler曾在2004他的个人网站提出了关于控制反转IoC的一个问题:反转的是控件的什么方面?他建议将此修改成一个更好的不言而喻的名字,即后来提出的依赖注入

虽然java平台提供了丰富的函数来支持应用开发,但缺少能够将这些基本构件打包成整体的方式。当然,可以使用Factory,,Abstract Factory,,Builder, Decorator,and Service Locator来组成不同的类和对象,但这些模式是非常简单定式的(指定名字、描述及何处使用等),并且还需要开发者自己去实现。

Spring框架的IoC解决了这一问题,它提供了将不同的组件集成到应用中的一种方法。许多机构和组织都使用Spring框架构件强壮的、持久的应用。

2.2模块(Modules)

Spring框架大约由20种模块组成,被分成以下几大类:核心容器(Core Container)、数据访问集成(Data Access/Integration)、Web、面向切面编程(Aspect Oriented Programming)、工具(Instrumentation)、消息和测试。如下图所示:

下面将会详细介绍每个组件:

核心容器:

包含了spring-core, spring-beans, spring-context, and springexpression(Spring Expression Language)模块。

spring-core 和 spring-beans提供了Spring的基础功能,包含控制反转和依赖注入。BeanFactory是工厂模式的复杂实现,可以将依赖的配置和声明从程序逻辑中分离开来。

spring-context建立在core和beans的基础上,是类似JNDI的一种访问对象的方式。spring-context模块继承了beans模块的特性,并且增加了国际化(例如使用资源包)、事件传播(event propagation)、资源加载、上下文的透明创建(transparent

creation of contexts)。Context也支持JAVA EE的特性,例如EJB、JMX和基础的远程调用。ApplicationContext是context模块的重点。

spring-expression为查询和操作对象提供了丰富的表达式语言(Expression Language)。它是统一表达式语言(unified expression language)的扩展。这种语言支持属性值的get和set,属性赋值,方法调用,命名变量和检索对象。

面向切面编程(AOP)和工具(Instrumentation):

spring-aop提供了面向切面的实现方法,允许定义方法拦截器和切入点。spring-aspects模块集成了AspectJ。

spring-instrument提供了类工具的支持和应用服务器的类装载器的实现。

消息:

Spring 4包含Message,MessageChannel,MessageHandler等。

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

包含JDBC,ORM,OXM,JMS和事务模块。

spring-jdbc提供了JDBC数据库抽象层,减少了冗余的JDBC代码的编写,也不用解析各数据库厂商的错误规范。

Web:

包含spring-web,,spring-webmvc,,spring-websocket,springwebmvc-Portlet模块。

spring-web模块提供了基本的面向web集成的特性,例如多文件上传功能、IoC容器的实例化。也包含了Spring远程支持中web相关的部分。

spring-webmvc模块(即Web-Servlet模块)包含了MVC的实现,使得web和领域模块分离。

spring-webmvc-portlet模块(即Web-Portlet模块)提供了在Portlet中的MVC实现。

Test:

支持Spring框架的单元测试和集成测试。

【未完待续】

参考资料:《Spring Framework Reference Documentation 4.1.1.RELEASE》

Spring mvc 4系列教程(一)的更多相关文章

  1. Spring mvc 4系列教程(三)—— Spring4.X的新特性

    1.Spring4.0的新特性 从2004年Spring的1.0发布后,后面又发布了很多重要的版本:Spring2.0提供了XML命令空间和AspectJ的支持:Spring2.5提出了注解驱动(an ...

  2. Spring mvc 4系列教程(二)——依赖管理(Dependency Management)和命名规范(Naming Conventions)

    依赖管理(Dependency Management)和命名规范(Naming Conventions) 依赖管理和依赖注入(dependency injection)是有区别的.为了将Spring的 ...

  3. ASP.NET MVC 入门系列教程

    ASP.NET MVC 入门系列教程 博客园ASP.NET MVC 技术专题 http://kb.cnblogs.com/zt/mvc/ 一个居于ASP.NET MVC Beta的系列入门文章,有朋友 ...

  4. 使用idea创建spring mvc项目图文教程

    使用idea创建spring mvc项目图文教程 前言: 使用惯了eclipse的朋友,如果刚换成了idea或许有些不习惯.但是使用idea之后,就会love上idea了.本文将通过图文讲解怎么通过i ...

  5. MyBatis整合Spring MVC(易百教程)

    MyBatis是ibatis的升级版,作为hibernate的老对手,它是一个可以自定义SQL.存储过程和高级映射的持久层框架.与Hibernate 的主要区别就是 Mybatis 是半自动化的,而 ...

  6. Spring Data Jpa系列教程--------实体解析和关联关系

    Spring Data Jpa是基于HIbernate开发的,所以建立实体建的实体和映射关系需要好好好的去了解一下,本文有以下内容,实体管理器介绍,实体与数据库表的映射介绍,关联关系(一对多,多对多) ...

  7. 最近无意中看到一个讲解spring mvc的系列,从源码的角度讲解,特记录下来,供以后反复学习

    SpringMVC深度探险(一) —— SpringMVC前传 SpringMVC深度探险(二) —— SpringMVC概览 SpringMVC深度探险(三) —— DispatcherServle ...

  8. Spring MVC (二)注解式开发使用详解

    MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处理器, 无需在xml中注册. 只需在代码中通过对类与方法的注解, 即可完成注册. 定义处理器 @Controller: 当前类为处理器 @ ...

  9. Spring MVC新手教程(二)

    第一篇文章宏观讲了Spring MVC概念,以及分享了一个高速入门的样例. 这篇文章主要来谈谈Spring MVC的配置文件. 首先来谈谈web.xml: web项目启动时自己主动载入到内存中的信息, ...

随机推荐

  1. Linux磁盘满问题分析

    线上一台Linux服务器最近经常磁盘根分区满告警,但不是普通的日志文件或数据文件过多过大,现象如下: 1)执行“df -h”查看各分区空间的使用情况[root@XEN64 /]# df -hFiles ...

  2. 关于latex的网站推荐

    有时候,你不知道某个数学符号的tex写法是什么,可以在下面这个网站手写该符号,然后会出现很多候选. http://detexify.kirelabs.org/classify.html 用latex处 ...

  3. java重定向与请求转发的区别

    最近工作不算太忙,今天在这里对java中的重定向和请求转发稍作总结,希望能帮助到大家. 请求转发: request.getRequestDispatcher().forward(); 重定向: res ...

  4. NLTK之WordNet 接口【转】

    转自:http://www.cnblogs.com/kaituorensheng/p/3149095.html   WordNet是面向语义的英语词典,类似于传统字典.它是NLTK语料库的一部分,可以 ...

  5. poj 3264 区间最大最小值 RMQ问题之Sparse_Table算法

    Balanced Lineup Time Limit: 5000 MS Memory Limit: 0 KB 64-bit integer IO format: %I64d , %I64u Java ...

  6. 11.Scrapy登录

    Request Request 部分源码: # 部分代码 class Request(object_ref): def __init__(self, url, callback=None, metho ...

  7. ECCV 2016 paper list

    摘录ECCV2016部分文章,主要有Human pose esimation,  Human activiity / actions, Face alignment, Face detection & ...

  8. [LintCode] 拓扑排序

    http://www.lintcode.com/zh-cn/problem/topological-sorting/# 给定一个有向图,图节点的拓扑排序被定义为: 对于每条有向边A--> B,则 ...

  9. MySQL--当mysqldump --single-transaction遇到alter table(1)

    部分生产环境采用mysqldump --single-transaction的方式在夜间进行数据库备份,而同事恰好在备份期间执行了alter table操作,操作部分成功部分失败,为啥呢? ##=== ...

  10. linux常用命令(二)文件上传下载及软件安装

    1.上传下载工具安装 (1)WINDOWS 到linux的文件上传及下载: windows下打开secureCRT,通过SSH连到⾄至远程linux主机:上传下载工具安装命令:yum -y insta ...