这是第二次看关于Spring的资料,由于刚開始学习Spring的时候是边看视频边学习的,所以更注重的是实现代码,可是对宏观的掌握还是不够,这次主要从宏观的角度来分析一下Spring。

什么是Spring

Spring是分层的Java SE/EE应用一站式的轻量级开源框架,以IoC(Inverse of Control:反转控制)和AOP(AspectOriented Programming:面向切面编程)为内核,提供了展现层Spring MVC和持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术,此外,Spring以海纳百川的胸怀整合了开源世界里众多注明的第三方框架的类库,逐渐成为使用最多的JavaEE企业应用开源框架

Spring的优点

首先,既然要学习和使用Spring,那么,我们就必需要知道使用Spring的优点,假设不能了解他的优点,就不能在适当的时候使用这个框架,当然也就失去了学习的意义。

方便结构,简化开发

通过Spring提供的IoC容器,我们能够将对象之间的依赖关系交由Spring进行控制,避免硬编程所造成的过度程序耦合,有了Spring,用户不必再为单实例模式类、属性文件解析等这些非常底层的需求编写代码,能够更专注于上层的应用。

AOP编码的支持

通过Spring提供的AOP功能,方便进行面向切面的编程,很多不easy用传统OOP实现的功能能够通过AOP轻松应付。

声明式事物的支持

在Spring中,我们能够从单调烦闷的十五管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。

方便程序的測试

能够用非容器以来的编程方式进行差点儿全部的測试工作,在Spring里,測试不再是昂贵的操作,而是随手可做的事情。

方便集成各种优秀框架

Spring不排斥各种优秀的开源框架,相反,Spring能够减少各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate,Hessian,Quartz等)的直接支持。

减少Java EE API的使用难度

Spring对非常多难用的Java EE API(如JDBC,JavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为减少。

Java源代码是经典学习范例

Spring的源代码设计精妙、结构清晰、匠心独运,处处体现着大师对Java设计模式灵活运用以及对Java即使的高深造诣,Spring框架源代码无疑是Java技术的最佳实践的范例。假设想在段时间内迅速提高自己的Java技术水平和应用开发水平,学习和研究Spring源代码将会使你受到意想不到的效果。

Spring的体系结构

假设说Spring是一个人,那么AOP和IoC就是他的灵魂(AOP和IoC在之前博客已经讲到),而他的结构体系就是他的骨骼,所以,这里我们要具体的研究一下Spring的结构体系

一张图胜过千言万语

以下依次讲讲结构体系中每个模块的内容

核心容器:

核心容器组成的核心,Beans,上下文和表达式语言模块,每一块的主要功能为:

spring
核心模块实现了
IOC 的功能,它将类和类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描述,由
loc 容器负责依赖类之间的创建、拼接、管理、获取等工作,
BeanFactory
接口是Spring
框架的核心接口,它实现了容器许多核心的功能。

Context 模块构建于核心模块之上,扩展了
BeanFactory 的功能,添加了
i18n 国际化、 Bean生命周期控制、框架事件体系、资源加载透明化等多项功能。此外,该模块还提供了许多企业级服务的支持,如邮件服务、任务调度、
JNDI 定位、 EJB
集成、远程訪门等。

ApplicationContext是 Context
模块的核心接口。

表达式语言模块是统一表达式语言
(unified EL) 的一个扩展,该表达式语言用于查询和管理运行期的对象,支持设置和获取对象属性,调用对象方法、操作数组、集合等。还提供了逻辑表达式运算、变量定义等功能·使用它就可以方便地通过表达式串和
Spring IOC 容器进行交互。

数据訪问/集成:

数据訪问/集成层包含JDBC,ORM,OXM,JMS和事务处理模块,每个模板的功能例如以下

JDBC模块提供了不再须要冗长的JDBC编码相关了JDBC的抽象层。

ORM模块提供的集成层。流行的对象关系映射API,包含JPA,JDO,Hibernate和iBatis。

OXM模块提供了一个支持对象/
XML映射实现对JAXB,Castor,使用XMLBeans,JiBX和XStream
的抽象层。

Java消息服务JMS模块包括的功能为生产和消费的信息。

事务模块支持编程和声明式事务管理实现特殊接口类,并为全部的POJO。

不论什么应用程序,其核心的问题是对数据的訪问和操作。数据有非常多表现形式,如数据表、XML、消息等,而每种数据形式又拥有不同的数据訪问技术(如数据表的訪问既能够直接通过JDBC,也能够通过Hirnate或iBatis)。

Spring站在DAO的抽象层面,建立了一套面向DAO层统一的异常体系,同一时候将各种訪问数据的检查型异常转换为非检查型异常,为整合各种持久层框架提供基础。其次,Spnng通过模板化技术对各种数据訪问技术进行了薄层的封装,将模式化的代码隐藏起来,使数据訪问的程序得到大幅简化·这样,Spring就建立起了和数据形式及訪问技术无关的统一的DAO层,借助AOP技术,Sp血g提供了声明式事务的功能。

Web:

在Web层包含网络,Web-Servlet,Web-Struts和网络的Portlet组件,其细节例如以下:

Web模块提供了主要的Web开发的集成特性,比如多方文件上传功能和使用的servlet监听器的IoC容器初始化和针对Web的应用程序上下文。

Web-Servlet模块包括Spring的模型-视图-控制器(MVC)实现Web应用程序。

Web-Struts模块包括支持类内的Spring应用程序集成了经典的StrutsWeb层。yiibai.com

Web-Portlet模块提供了MVC实如今portlet环境中使用和镜子Web的Servlet的模块的功能。yiibai.com

该模块建立在ApplicationContext模块块之上,提供了Web应用的各种工具类,如通过Listener或Servlet初始化Spring容器,将Sprmg容器注冊到Web容器中。其次,该模块还提供了多项面向web的功能,如透明化文件上传、Velocity、FreeMarker、XSLT的支持。

此外,Spring能够整合Struts、WebWork、TapestryWeb等MVC框架。

其它:

还有像AOP,切面,规范,网络和測试模块,其具体情况例如以下其它一些重要的模块:

AOP模块提供了面向方面编程实现,同意您定义方法拦截器和切入点,以干净解耦,实现的功能,应该分开的代码。

Aspects模块提供与AspectJ的集成这又是一个功能强大且成熟的面向方面编程(AOP)框架。

Instrumentation模块提供了一定的应用server中使用类工具的支持和类载入器实现。

測试模块支持Spring组件使用JUnitTestNG框架的測试。

此外,Spring在远程訪问以及WebService上提供了对非常多著名框架的整合。因为Spring框架的扩展性,特别是随着spring框架影响性的扩大,越来越多框架主动地支持Spring框架,让spring框架应用涵盖面越来越宽广。

本博客主要借鉴了《Spring3.X企业开发应用实战》,一本很系统的解说Spring的书籍,推荐大家看一下

Spring核心技术的更多相关文章

  1. Spring核心技术(八)——Spring自动装载的注解

    本文针对自动装载的一些注解进行描述. 基于注解的容器配置 @Required注解 @Required注解需要应用到Bean的属性的setter方法上面,如下面的例子: public class Sim ...

  2. Spring核心技术(六)——Spring中Bean的生命周期

    前文已经描述了Bean的作用域,本文将描述Bean的一些生命周期作用,配置还有Bean的继承. 定制Bean 生命周期回调 开发者通过实现Spring的InitializeingBean和Dispos ...

  3. Spring核心技术(五)——Spring中Bean的作用域

    前文概述了Spring的容器,Bean,以及依赖的一些信息,本文将描述一下Bean的作用域 Bean的作用域 当开发者定义Bean的时候,同时也会定义了该如何创建Bean实例.这些具体创建的过程是很重 ...

  4. Spring核心技术(四)——Spring的依赖及其注入(续二)

    前面两篇文章描述了IoC容器中依赖的概念,包括依赖注入以及注入细节配置.本文将继续描述玩全部的依赖信息. 使用 depends-on 如果一个Bean是另一个Bean的依赖的话,通常来说这个Bean也 ...

  5. Spring 核心技术(3)

    接上篇:Spring 核心技术(2) version 5.1.8.RELEASE 1.4 依赖 典型的企业应用程序不会只包含单个对象(或 Spring 术语中的 bean).即使是最简单的应用程序也是 ...

  6. Spring 核心技术(2)

    接上篇:Spring 核心技术(1) version 5.1.8.RELEASE 1.3 Bean概述 Spring IoC 容器管理一个或多个bean,他们都是根据提供的配置元数据(例如 XML 中 ...

  7. Spring 核心技术(4)

    接上篇:Spring 核心技术(3) version 5.1.8.RELEASE 1.4.2 依赖关系及配置详情 如上一节所述,你可以将 bean 属性和构造函数参数定义为对其他托管 bean(协作者 ...

  8. Spring 核心技术(5)

    接上篇:Spring 核心技术(4) version 5.1.8.RELEASE 1.4.5 自动装配协作者 Spring 容器可以自动连接协作 bean 之间的关系.你可以让 Spring 通过检查 ...

  9. Spring 核心技术(6)

    接上篇:Spring 核心技术(5) version 5.1.8.RELEASE 1.5 Bean 作用域 创建 bean 定义时,你创建了一种用于创建 bean 定义中定义的类实例的方法.bean定 ...

  10. Spring 核心技术(7)

    接上篇:Spring 核心技术(6) version 5.1.8.RELEASE 1.6 定制 Bean 的特性 Spring Framework 提供了许多可用于自定义 bean 特性的接口.本节将 ...

随机推荐

  1. Java 开源博客——B3log Solo 0.6.7 正式版公布了!

    Java 开源博客 -- B3log Solo 0.6.7 正式版公布了!欢迎大家下载. 另外,欢迎观摩 B3log 团队的新项目:Wide,也很欢迎大家參与进来 :-) 特性 基于标签的文章分类 P ...

  2. UVa 725暴力求解

    A - Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Su Description   Writ ...

  3. 【Java Web】使用URLRewrite实现网站伪静态

    大部分搜索引擎都会优先考虑收录静态的HTML页面,而不是动态的*.jsp.*.php页面.但实际上绝大部分网站都是动态的,不可能全部是静态的HTML页面,因此互联网上大部分网站都会考虑伪静态——就是将 ...

  4. iOS开发之使用Ad Hoc进行测试

    由于最近某个项目需要给别人测试,使用的是Ad Hoc方法 首先登录开发者官网配置证书 1.添加Certificates,从电脑获取certSigningRequest然后添加进去 2.在Identif ...

  5. Qt国际化(Q_DECLARE_TR_FUNCTIONS() 宏给非Qt类添加翻译支持,以前没见过QTextEncoder和QTextDecoder和QLibraryInfo::location()和QEvent::LanguageChange)

    Internationalization with Qt 应用程序的国际化就是使得程序能在国际间可用而不仅仅是在本国可用的过程. Relevant Qt Classes andAPIs 以下的类支持Q ...

  6. USACO 2005 January Gold The Wedding Juicer

    题目 题目链接,我只在poj上找到了题目,usaco居然上不去. 大意就是说有一些\(1\times 1\times 1\)的小方块堆在一起,问最多能装多少水. 我们在一次测试中出了这题,由于我写水题 ...

  7. Android 程式开发:(廿一)消息传递 —— 21.3 使用Intent发送短信

    使用SmsManager类,可以在自己编写的程序内部发送短信,而不需要调用系统的短信应用. 然而,有的时候调用系统内置的短信应用会更加方便. 这时,需要使用一个MIME类型为vnd.android-d ...

  8. Linux 软件源设置

    版本号:1.0.0-beta 作者:石硕 更新:2014-04-30 15:51:40 ======================================================== ...

  9. 用Eclipse做Android开发时出现java.lang.NoClassDefFoundError问题

    之前有遇到过这个问题,后来解决了,今天又遇到了,但是忘了当时是怎么解决的,费了好长时间,终于又找回解决的方法,现在记录下来,以防以后又遇到. 这个错误出现在我的某一个Activity,但是我反复确认了 ...

  10. 基于visual Studio2013解决面试题之1102合并字符串

     题目