第一章 Spring的简单剖析
简单的说Spring是什么呢?如果单从字面上理解它,可以解释为: 春天, 跃起, 弹性…。中国有句名言:”一年四季在于春”。在字面可以想象它给人的意义很重要。
在我们当今流行的技术领域中,它又是什么呢?首先让我们了解一下它产生的背景和来源。
1、Rod Johnson 的《Expert One-on-One J2EE Design and Development》
(1)Spring的起源
Spring起源于Rod Johnson的《Expert One-on-One J2EE Design and Development》,此书已经由电子工业出版社出版,译版名为《J2EE设计开发编程指南》。同时一个新的Java Framework 发布,同样出自Rod Johnson 的手笔--这就是SpringFramework。
(2)Spring框架的产生
SpringFramework 实际上是Expert One-on-One J2EE Design and Development 一书中所阐述的设计思想的具体实现。在One-on-One 一书中,RodJohnson 倡导J2EE 实用主义的设计思想,并随书提供了一个初步的开发框架实现(interface21 开发包)。
而SpringFramework 正是这一思想的更全面和具体的体现。
(3)Spring框架的设计者---- Rod Johnson
Rod Johnson 在interface21 开发包的基础之上,进行了进一步的改造和扩充,使其发展为一个更加开放、清晰、全面、高效的开发框架。
如今 SpringFramework是最流行的轻量级Java IoC容器。Rod本人也是Servlet2.4和JDO2.0专家委员会成员,他同时也是一位经验丰富的技术咨询专家。Rod开了一家咨询公司,提供 SpringFramework的技术支持和培训。
(4)Spring框架属于应用层的框架
它关注的领域是其他许多流行的Framework未曾关注的,Spring要提供的是一种管理你的业务对象的方法。
它的设计从一开始就是要帮助你编写易于测试的代码。Spring是使用测试驱动开发的工程的理想框架。
2、为什么要提供Spring框架
Spring的目标是实现一个全方位的整合框架,在Spring框架下实现多个子框架的组合,这些子框架之间彼此可以独立,也可以使用其它的框架方案加以替代----Spring框架在设计上可以独立构建应用或者结合已有的框架一起构建应用。Spring希望提供one-stop shop的框架整合方案 。
(1)面向系统设计者:为解决一些关于 J2EE 的真实世界问题而设计的
比如J2EE平台的复杂性、低性能和可测试性低等等,任何Java系统开发都能从Spring的简单、可测试和松耦合特征中受益。
(2)面向应用实现者
提供Spring的主要目的是使J2EE易用和促进良好的编程习惯,而Spring的目标就是让已有的技术更加易用。
3、传统的J2EE系统在应用中所面临的问题
(1)J2EE技术的发展回顾
J2EE技术平台的标准化的特性大大地提升了企业级软件的开放程度,并且得到了整个行业和开发者的广泛认可。然而,J2EE在一些应用方面开始出现捉襟见肘-----低效、复杂以及依赖容器等导致应用系统的开发的成本比较高。
(2)J2EE技术平台的主要问题
l  由于多层结构导致代码复杂,系统编码复杂,容易混乱,无法控制。
l  可选择范围太多导致学习成本比较高,无法使初学者快速上手。
l  目前J2EE标准技术只注重中大型系统,小型系统市场被忽视,可伸缩的小中型系统不容易开发。
合理并正确地应用J2EE技术平台来开发并不是件轻松的事情,因为我们有很多东西需要仔细考虑!
l  比如在多层架构的系统中我们需要考虑怎样建立用户接口?
l  在哪里处理业务逻辑?怎样持久化数据?
l  安全问题如何实现?
l  再比如在各个层中应该使用什么技术?
l  怎样的设计既能松散耦合还能灵活改变?
l  怎样替换某个层而不影响整体构架?
l  应用程序如何做各个方面的处理(例如,事务处理)等。
(3)拒绝使用EJB并不意味着拒绝J2EE平台中一些良好的思想和解决方案
在J2EE遭遇失败的场景中,EJB通常都扮演着重要的角色。因此,J2EE社群不断地向着
l  更简单的解决方案
l  更少地使用EJB
l  向轻量级平台等方向发展。
但我们所要明确的是,拒绝使用EJB并不意味着拒绝J2EE平台中一些良好的解决方案------比如,对象的生命周期管理、容器提供基础服务(分离应用组件和基础服务组件的思想)等。
因为,每个企业应用系统都需要这些基础服务。问题是,我们如何利用现有的框架来提供这些基础服务呢,伴随着这个问题的提出,一个轻量级的J2EE解决方案出现了,这就是Spring框架。
 
4、利用Spring IoC和AOP实现J2EE平台中的EJB的主要技术
Spring是一个轻量级的控制反转技术(IoC)和面向切面编程(AOP)技术的容器框架。
(1)利用Spring IoC实现J2EE平台中所倡导的由容器实现对象的生命周期管理
Spring IoC,借助于依赖注入设计模式,使得开发者不用理会对象自身的生命周期及其关系,而且能够改善开发者对J2EE模式的使用;
(2)利用Spring AOP实现J2EE平台中所倡导的分离应用逻辑组件和通用服务组件
Spring AOP,借助于Spring实现的拦截器,开发者能够实现以声明的方式使用企业级服务,比如安全性服务、事务服务等。
(3)Spring IoC和 Spring AOP组合在一起形成了Spring
这样一个有机整体,使得构建轻量级的J2EE平台的企业级的系统架构成为可能,而且事实证明,非常有效。没有Spring IoC的Spring AOP是不完善的,没有Spring AOP的Spring IoC是不健壮的。
 
5、使用Spring的主要的优点----“解耦”和“脱离容器”
(1)Spring框架的核心思想我们可以用两个字来描述,那就是“解耦”
l  应用程序的各个部分之间(包括应用内部的代码之间和应用程序与平台之间)尽量形成一种松耦合的结构,使得应用程序有更多的灵活性。
l  应用程序与底层应用服务器平台的解耦。
(2)在Spring中是如何实现上面的两种形式的解耦
l  应用内部的代码之间的解耦主要通过一种称为控制反转(IOC)的技术来实现。
l  应用程序与底层应用服务器平台的解耦借助AOP技术来实现,Spring内置的AOP支持使得一些本来必须由容器支持的功能,比如事务控制可以脱离开容器运行。
(3)使用Spring的主要的优点具体体现如下:
l  利用延时注入思想组装代码,提高系统扩展性,灵活性,实现插件式编程。
l  利用AOP思想,集中处理业务逻辑,减少重复代码,构建优雅的解决方案。
l  利用其对Hibernate的SessionFactory、事务管理的封装,更简洁的应用Hibernate。
(4)如果我们不用Spring将额外需要写很多代码!
同时,跟Spring提供的功能相比效果又怎样?比如事务处理、JDBC数据库访问等实现。
5、SpringFramework中文论坛[url]http://spring.jactiongroup.net/index.php[/url]
6、同样具有与Spring DI相同功能的其它框架
世界上有很多开源项目,因此当我们发现Spring并非唯一的提供依赖注入功能,或者全功能的端对端应用程序构建方案的框架。实际上,总是有太多的项目需要关注。
本着开放的精神,我们简短地介绍其中的几个,但是我们相信其中没有一个能提供Spring中那么丰富的解决方案。
(1)PicoContainer
PicoContainer ([url]www.picocontainer.org[/url])是一个特别小(50K)的DI容器,允许我们在除了PicoContainer本身外,不添加任何其他依赖的情况下就使用DI。因为PicoContainer就是单纯的DI容器,我们会发现随着我们的应用增大,我们你需要引入另外一个框架,比如Spring,那么如果一开始就用Spring岂不是更好。
但是,假若我们需要的是一个微型的DI容器,PicoContainer是一个好选择,但因为Spring的DI容器包和框架中的其他部分是分离的,我们也可以很容易地只使用这一部分,这样为日后的灵活性留下了余地。
(2)NanoContainer
NanoContainer([url]www.nanocontainer.org[/url])是PicoContainer的扩张,用于管理独立的PicoContinaer树。因为Spring提供了所有的标准DI容器具有的相同的功能,NanoContainer对比Spring占不到大的便宜。NanoContainer因为它对脚本语言的支持,它可以和容器交互,这很有趣。
但是在不久的将来,在Spring中也可以看到这个功能。
(3)Keel Framework
Keel Framework ([url]www.keelframework.org[/url])更像是一个元框架,它的大多数功能都是从其他框架借用的,容纳于一个屋檐下。比如,DI功能从Apache Avalon容器中来,web功能从Struts或类似框架中获得。
Keel对同一个元件有很多实现,把它们胶合成同一个系统,允许我们在对应用程序改动最小的情况下替换元件。尽管其功能集很丰富,Keel看上去没能获得Spring那么高的接受度。我们只是简要地研究了Keel,我们觉得这种情况是因为操作难度的问题造成的。Spring对各个层面的开发者都立即可用,但Keel显得更加复杂。虽然这么说,它的功能集令人印象深刻,依然是Spring的直接竞争者。

本文转自 weijie@java 51CTO博客,原文链接:http://blog.51cto.com/weijie/66455,如需转载请自行联系原作者

第一章 Spring的简单剖析相关推荐

  1. 第一章 Spring基础

    第一章 Spring基础 1.1 Spring介绍 Spring是一个框架,框架是高度抽取.可重用的代码的一种设计.Spring就是多个可重用的模块的集合,从而形成一个领域的整体解决方案. Sprin ...

  2. 19年8月 字母哥 第一章 spring boot 2.x基础及概念入门 这里全部看完了 热部署没出来 第二章在前面2页 用热点公司网不行

    http://springboot.zimug.com/1233100   文档 http://www.zimug.com/page/5     字母哥个人博客 11111 第一章 spring bo ...

  3. 框架设计--第一章 Spring的基本应用--习题答案

    摘要:微信搜索[三桥君] 课程介绍:"框架技术"是软件工程专业的核心课程,是本专业限选课,是Java 应用开发课程,是本专业学生就业的主要方向. 说明:框架设计其他章节的习题答案也 ...

  4. 第一章 Matlab的简单介绍

    第一章 Matlab的简单介绍 Matlab的发展 Matlab的工作环境 Matlab的帮助系统 Matlab的窗口以及如何设置字体的大小 Matlab写语句 Matlab的执行方式 Matlab的 ...

  5. python数据挖掘入门与实践-第一章-用最简单OneR算法对Iris植物分类

    前言: 这本书其实有配套代码的来着,但是有点坑的是,里面的代码对应的版本是有点旧的,用的时候会警告或者已经报错.甚至有些代码书里提了但是却没有写进去,要自己去摸索.我是每一章都跟着代码示例,把每一个步 ...

  6. spring in action学习-第一章 spring之旅

    首先我先吐槽一下这本书的封面图,我能理解成一个包着头巾的男人举着个水壶昂首挺胸,最后给你个眼神....开玩笑的这幅插图是约旦西南部卡拉克省的居民,那里的山顶有座城堡,对死海和平原有极佳的视野,这幅图出 ...

  7. Spring实战 | 第一部分 Spring的核心(第一章 Spring之旅)

    Spring的bean容器 介绍Spring的核心模块 更为强大的Spring生态系统 Spring的新功能 一.简化java开发 为了降低Spring开发的复杂性,Spring采取了以下4钟关键策略 ...

  8. 第一章--Spring工厂设计模式消除耦合

    1.什么是Spring Spring是一个轻量级的JavaEE解决方案,整合众多优秀的设计模式 - 轻量级 1.对于运行环境是没有额外要求的 开源 tomcat resion jetty 收费 web ...

  9. 《Spring实战》第一章 — Spring之旅

    2019独角兽企业重金招聘Python工程师标准>>> 1.1 使用Spring简化Java开发 为了降低Java开发,Spring使用了一下4种关键策略: 基于POJO的轻量级和最 ...

最新文章

  1. 谷歌出品EfficientNet:比现有卷积网络小84倍,比GPipe快6.1倍
  2. 数据结构和算法分析:第四章 树
  3. IMO班聊乔月猛:聊天不如聊工作
  4. 员工薪酬管理设计方案
  5. 红帽子linux生效环境变量,RedHat Linux 5无法使用ifconfig的解决方法
  6. 飞鸽传书开发者都在为生计发愁?
  7. 4799元!OPPO Reno巴萨定制版开启预售:7月26日正式开售
  8. C++友元函数、友元类与类模板
  9. Centos 7安装RabbitMQ 3.7.8版本(单机版)-不使用RPM
  10. 判断一段程序是由C 编译程序还是由C++编译程序编译的
  11. 攻防世界——MISC——pdf
  12. GHOST XP SP3 遐想网络 纯净驱动预览版 2.0
  13. win10释放C盘空间(清理C盘)
  14. DHT11修改stm32引脚的笔记
  15. ubuntu16.04安装微软kinect V1驱动
  16. MATLAB永久常数
  17. 【Hadoop实训】统计文件中所有单词的平均长度
  18. 【语音识别】基于动态时间规整(DTW)的孤立字语音识别Matlab源码
  19. NYOJ - 独木舟上的旅行(贪心)
  20. Lua游戏中常用到的一些动作

热门文章

  1. Composer Player 属性设置
  2. angularjs跨页面传参遇到的一些问题
  3. 基于SpringBoot的后台管理系统(异常、注解、node、page)(二)
  4. radware alteon 负载均衡器设置
  5. java编码问题汇总
  6. Linux下软件实现raid
  7. centos cmake安装mysql_CentOS下使用cmake编译安装mysql
  8. Java 面向对象 之 封装方法
  9. python np.linspace
  10. 问题8:NavigationController 自定义返回按钮I