Spring简介----概念

前言:最近学习了Spring框架,就此总结下心得体会

一. Spring简介:
  • 什么是Spring?
    Spring是一个开源的轻量级、非侵入式的控制反转和面向切面的容器框架。
    1)轻量级(Lightwight):简而言之就是资源jar包小,Spring的核心包在文件容量上只有不到1MB的大小,而使用Spring核心包所需要的资源负担也是很小的

    2)非侵入性(No intrusive):不需要使用框架的API去解决问题,提高程序的可维护性,可扩展性。String提供的功能都在配置文件中完IOC成。Spring的目标之一是实现非侵入性框架,希望让应用程序几乎感受不到框架的存在,减低应用程序在框架移植时的负担,进一步增强应用程序组件的可重用性,简单地说,使用Spring的话,应用程序中某些组件可以直接拿到另一个应用程序或框架之中直接使用。

    3)容器(Container):Spring提供容器功能,容器可以管理对象的生命周期,对象与对象之间的依赖关系,我们可以使用一个配置文件(通常是XML),在上面定义好对象的名称,如何产生 (Prototype方式或Singleton方式),以及那个对象产生之后必须设定成为某个对象的属性等。在启动容器后,所有的对象都可以直接取用,不用编写任何一行代码来产生对象,或是建立对象与对象之间的依赖关系。
            换个更直白点的说明方式:容器是一个Java所编写的程序,原先必须自行编写程序以管理对象关系,现在容器都会自动帮您做好。

    4)控制反转IOC(Inversion Of Control):其更具体的另一个名词是Dependency Injection,中文常翻译为“依赖注入”。即把程序中类之间的依赖关系的控制反转给Spring容器来处理。使用Spring,我们不必自己在程序代码中维护对象的依赖关系,只需要在配置文件中加入设定,Spring核心容器会自动根据配置将依赖注入指定的对象。

    *5)面向切面编程\color{red}{AOP}(\color{red}{Aspect-oriented-programming}):Spring最被人重视的另一方面是支持AOP的实现,然而AOP框架只是Spring支持的一个子框架,说Spring框架是AOP框架并不是一个适当的描述,人们对于AOP的关注反映至Spring上,使得人们对于Spring的关注集中在它的AOP框架上,虽然所有误解,但也突现了Spring的另一个令人关注的特色。
            举个实际的栗子来说明AOP的功能之一,假设我们有个日志(Logging)的需求,我们可以无须修改任何一行程序代码,就可以将这个需求加入至原先的应用程序之中,而若我们愿意,也可以在不修改任何程序的情况下,将这个日志的功能移除。
            Spring的IOC容器功能与AOP功能的实现是其重心所在,在Spring下实现了持久层,MVC Web框架以及各种企业服务的API封装,他们的实现有些倚重于Spring的IOC容器与AOP功能,Sping的这些框架或封装的API功能彼此可以独立,也可以结合其它的框架方案加以替代,Spring希望提供one-stop shop的框架整合方案。

    6)持久层:Spring提供对持久层的整合,如对JDBC的使用加以封装与简化,提供事物(Transaction)管理功能,对于O/R Mapping工具(Hibernate,MyBatis)的整合,Spring也提供了解决的方案。

    7)Web框架:Spring也提供MVC Web框架的解决方案,使用Spring Web框架的好处是可以善用IOC与AOP的功能,我们甚至可以轻松地替换使用不同的View层技术,例如使用JSP,结合Tiles,使用PDF作为展现给使用者的画面技术。
            也可以将自己熟悉的Web框架与Spring整合,例如Struts,JSF等,都可以与Spring整合,而适用于当前所进行的应用程序。

    8)其它企业服务的封装:对于一些服务,例如JNDI,Mail,任务计划(Scheduling),远程(Remoting)等,Spring不直接提供实现,而是采取抽象层方式对这些业务进行封装,让这些服务在使用时可以有一致的使用模型,并且在使用上更为简化。

~小结:

        Spring是一个开源的JavaEE框架。它作为一个优秀的轻量级的企业应用开发框架,可以大大简化企业应用开发的复杂性,能够创建出松耦合、易测试、易扩展、易维护的Java应用系统。

二. Spring组成:
  • Spring框架的主要优势之一就是其分层架构,分层架构允许用户选择使用哪一个组件。Spring框架的分层架构,由7个定义良好的模块组成。组成Spring框架的每个模块(组件)都可以单独存在,或者与其他一个或多个模块联合使用。其组成图片如下:


    Spring组成

Spring AOP: 在AOP模块中,Spring对面向切面提供了丰富的支持。这个模块是为Spring应用系统开发切面的基础。为了保证Spring与其他AOP框架之间的互通,Spring的大部分AOP都是基于AOP Alliance的API开发的。AOP Alliance是一个开源项目,它的目的是促进AOP的使用,并且通过定义一套接口和组建来确保不同的AOP之间实现互通性。Spring AOP模块也引入了metadata编程。使用Spring的metadata,你可以通过代码中的注解来告诉Spring在哪里以及如何应用切面。

Spring DAO: 编写JDBC代码时总是要写一些样板式的代码,如:获得连接,创建语句,处理结果,最后关闭连接。Spring的JDBC和DAO模块把这些样板式的代码抽象出来,让你的数据库代码变得简单明了。这个模块还建立了一个容易理解的数据库异常层,它建立在各种数据库错误信息之上。以后就不用再去解释那些隐晦专有的SQL错误消息了。另外,这个模块利用Spring的AOP模块为Spring系统中的对象提供事务管理服务。

Spring ORM: Spring为那些喜欢使用ORM(Object/Relational Mapping)工具的开发人员提供了ORM模块。Spring不想实现自己的ORM解决方案,但是它为许多流行的ORM框架做了钩子程序,包括Hibernate,JDO和MYBATIS SQL影射。Spring的事务管理支持所有这些ORM框架以及JDBC。

Spring Web:Web上下文模块建立在应用上下文模块的基础之上,提供了适合Web系统的上下文。另外,该模块还支持多项其他面向Web的任务,如透明处理多文件上传请求,自动将请求参数邦定到业务对象中等。这个模块中还包括对Jakarta Struts的集成支持。

Spring Context: 如果说核心模块中的BeanFactory使Spring成为容器的话,那么,上下文模块就是使Spring成为框架的原因。这个模块扩展了BeanFactory,添加了对I18N,系统生命周期事件以及验证的支持。另外,这个模块提供了很多企业级服务,如电子邮件服务,JNDI访问,EJB集成,远程调用以及定时服务,并且支持与模板框架(如Velocity和FreeMarker)的集成。

Spring Core: Spring的所有模块都是建立在核心容器之上的。容器规定如何创建,配置和管理Bean,以及很多Spring的具体细节。Spring核心容器为Spring框架提供了基础功能。在这个模块中你会找到BeanFactory这个类,它是所有基于Spring框架系统的核心。BeanFactory采用工厂模式来实现IoC,它将系统的配置和依赖关系从代码中独立出来。当遇到IoC来装配Bean的使用,我们都会讨论核心模块。

Spring Web MVC:Spring为Web系统提供了全功能的MVC框架。虽然Spring可以很容易地与其他MVC框架(如Struts)集成,但是Spring的MVC框架利用IoC将控制逻辑和业务逻辑清晰地分离开来。你可以自己声明如何将请求参数绑定到业务对象中。
另外,Spring的MVC框架还可以使用Spring的其他服务,如信息国际化和验证服务。

~小结:

Spring框架的组成:

  • Springcore:提供IOC对象管理功能
  • SpringAOP:面向切面编程
  • SpringORM:提供和持久层框架进行集成的功能
  • SpringDAO:提供了数据库连接,事务管理等功能的实现
  • SpringWeb:提供和Sevlet技术进行整合的功能
  • SpringWeb MVC:是Spring的子框架
  • SpringContext:提供和企业级开发技术进行集成的功能
三.Spring的优点 & 为什么使用Spring
  • 优点:
  1. 开源框架,开放性较高
  2. 有效地组织中间层对象
  3. 多种可选的事务处理方式
  4. 多种可选的持久层策略
  5. 多种可选的Web MVC框架策略
  6. 高度可扩展的安全解决方案
  7. 有效的消除单例、工厂等模式的使用
  8. 将面向接口编程做到实处
  9. 使单元测试变得简单
  10. 使EJB的使用成为一个选择
  11. 提供了一致的数据访问框架
  12. 只选择你需要的
  • Why:

• 没有使用Spring:
      – 充斥了很多工厂类、singleton单例模式;
      – 配置也不够集中,没有一个统一的管理;
      – 在业务层,我们一般都需要依赖Dao,我们需要自己写一些工厂类来生成;

• 使用Spring:
      – 它是轻量级的,没有侵入性,这是它流行的主要原因。
      – 我们来装配对象的依赖关系
      – 把各个对象之间的依赖关系交给Spring 的IoC容器来做。

PS:Spring的发展历史及版本
      Spring的核心代码均来自于真实的项目,Rod Johnson是这个产品的创造者,在《Expert One-on-One J2EE Design and Development》一书中第一次出现了Spring的一些核心思想,是从商业项目开发实践中逐步提炼出的一种架构基调。
      版本:2003发布,至今经历了1.0、1.1、1.2、2.0、2.5、3.0、3.1、3.2、4.0等版本,目前最新的是4.0版本。

下一篇:Spring环境的搭建

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容