上图为Spring框架的组成结构

下面这几张也是的

Spring将大量实际开发中需要重复解决的步骤,抽象成了一个框架。

其中Spring Core Container是Spring框架的核心机制。

Spring框架就是实现了AOP功能的IOC(IOC是啥)容器。

Spring为企业级开发提供了一个轻量级解决方案,其中包括:

基于依赖注入的机制;

基于AOP的声明式事务管理;

与多种持久层技术整合;

优秀的Web MVC框架;

Spring贯穿表现层、业务层、 持久层。

Spring具有如下优点:

低侵入式设计(啥叫低侵入式?),代码污染极低。

独立于各种应用服务器(啥叫应用服务器?),基于Spring框架的应用,可以实现真正的Write Once、Run Anywhere。

Spring的DI容器(啥叫DI容器)降低了业务对象替换(啥叫对象替换?)的复杂性,提高了组件之间的解耦。

Spring的AOP可将一些通用任务如安全、事务、日志等进行集中式处理,提高更好复用。

Spring的ORM和DAO提供了与第三方持久层框架(例如Hibernate)的良好整合,简化了底层数据库方法。

项目中可以使用全部或者部分的Spring框架。

Spring的核心要点是:支持不绑定到特定J2EE服务容器的可重用业务和数据访问对象。

AOP,Aspect Oriented Programming 面向切面编程。通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

IOC,Inversion of Control,控制反转。

DI,Dependency Injection,依赖注入。

ORM,Object Relation Mapping,对象关系映射,是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。

DAO,Data Access Object,数据访问对象。

为什么要学Spring?

先来看张图,它记录的是Web框架的发展史。

还有更多你可能听都没听说的Web框架,详细的框架列表请参见这里。我想你已经眼花缭乱了,从这么多框架中,如何才能挑选出你心仪的框架呢?

主流的几种运行在JVM上的全栈式Web框架(Full Stack Web Framework)有Spring,Grails,Play!,JRuby on Rails,Vaadin等等,它们各自有各自的优缺点。(所谓Full Stack Web框架,是指所有的层无缝衔接,你可以做到Don’t Repeat Yourself(DRY),自上而下的使用一种语言。)

对我们而言,永远没有“最好”的框架,只有最适合自己需求的框架。在考虑一个框架时,你需要考虑的问题通常有这么几个:

  • 我使用的语言和平台支持这个框架吗?

  • 这个框架和其他我正在使用的框架的兼容性怎么样?

  • 学习这个框架的学习曲线是否太陡?

  • 它的开发效率如何?

  • 安全性如何?

  • 方便进行单元测试吗?

  • 这个框架的文档支持怎么样?社区够活跃吗?

对于笔者而言,学习曲线和开发效率是非常重要的,考虑到Spring完全使用Java语言,不需要再学习新的语言,另外Spring同其他框架的兼容性、可扩展性都非常好,更重要的是强大的文档支持和活跃的社区,让我选择Spring作为开发应用的主要框架。Spring未必是性能最卓越的,它的综合评分也不是最高的。但确实能满足我的大部分需求,越深入的学习越是能体会到它的强大,它能帮助我开发出稳定、安全而又简洁易维护的软件出来,所以也便有了这个系列教程。

下面列出Spring的优点:

  • 轻量级:相较于EJB容器,Spring采用的IoC容器非常的轻量级,基础版本的Spring框架大约只有2MB。Spring可以让开发者们仅仅使用POJO(Plain Old Java Object,相对于EJB)就能够开发出企业级的应用。这样做的好处是,你不需要使用臃肿庞大的EJB容器(应用服务器),你只需要轻量的servlet容器(如Tomcat)。尤其在一些开发当中,很稀缺内存和CPU资源时,采用Spring比EJB无论是开发还是部署应用都更节约资源。

  • 控制反转(IOC):Spring使用控制反转技术实现了松耦合。依赖被注入到对象,而不是创建或寻找依赖对象。

  • 面向切面编程(AOP): Spring支持面向切面编程,同时把应用的业务逻辑与系统的服务分离开来。

  • MVC框架:Spring MVC是一个非常好的MVC框架,可以替换其他web框架诸如Struts。

  • 集成性:Spring非常容易和其他的流行框架一起集成开发,这些框架包括:ORM框架,logging框架,JEE, Quartz,以及Struts等表现层框架。

  • 事务管理:Spring强大的事务管理功能,能够处理本地事务(一个数据库)或是全局事务(多个数据,采用JTA)。

  • 模块分离:Spring框架是由模块构成的。虽然已经有太多的包和类了,但它们都按照模块分好类了,你只需要考虑你会用到的模块,而不用理其他的模块。

  • 异常处理:由于Java的JDBC,Hibernate等API中有很多方法抛出的是checked exception,而很多开发者并不能很好的处理异常。Spring提供了统一的API将这些checked exception的异常转换成Spring的unchecked exception。

  • 单元测试:Spring写出来的代码非常容易做单元测试,可以采用依赖注射(Dependency Injection)将测试的数据注射到程序中。

不得不提到,如果你要开发一个大型的Web系统,MVC框架必不可少。Spring MVC作为其中的佼佼者,被大多数系统作为MVC框架,使用它的开发者也是最多的,其搜索热度一直居高不下。此外你也能得到更多的工作机会呢!

Spring的起源和背景的更多相关文章

  1. spring框架的总结

    http://www.cnblogs.com/wangzn/p/6138062.html 大家好,相信Java高级工程师对spring框架都很了解吧!那么我以个人的观点总结一下spring,希望大家有 ...

  2. 使用Spring AOP实现读写分离(MySql实现主从复制)

    1.  背景 我们一般应用对数据库而言都是“读多写少”,也就说对数据库读取数据的压力比较大,有一个思路就是说采用数据库集群的方案,其中一个是主库,负责写入数据,我们称之为:写库: 其它都是从库,负责读 ...

  3. Spring AOP 实现数据库读写分离

    背景 我们一般应用对数据库而言都是"读多写少",也就说对数据库读取数据的压力比较大,有一个思路就是说采用数据库集群的方案, 其中一个是主库,负责写入数据,我们称之为:写库: 其它都 ...

  4. Spring技术内幕——深入解析Spring架构与设计原理(一)IOC实现原理

    IOC的基础 下面我们从IOC/AOP开始,它们是Spring平台实现的核心部分:虽然,我们一开始大多只是在这个层面上,做一些配置和外部特性的使用工作,但对这两个核心模块工作原理和运作机制的理解,对深 ...

  5. 为什么说 Java 程序员到了必须掌握 Spring Boot 的时候?

    Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热,就单从我个人的博客的访问量大幅增加就可以感受到大家对学习 Spring Boot 的热情,那么在这么多人热衷于学习 ...

  6. 为什么说Java程序员到了必须掌握Spring Boot的时候?

    摘要: SpringBoot的来龙去脉. 原文:为什么说 Java 程序员到了必须掌握 Spring Boot 的时候? 微信公众号:纯洁的微笑 Fundebug经授权转载,版权归原作者所有. Spr ...

  7. spring reference

    Spring框架概述 Spring可以轻松创建Java企业应用程序.它提供了在企业环境中使用Java语言所需的一切,支持Groovy和Kotlin作为JVM上的替代语言,并可根据应用程序的需要灵活地创 ...

  8. [转] 为什么说 Java 程序员必须掌握 Spring Boot ?

    Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热,那么, Spring Boot 诞生的背景是什么?Spring 企业又是基于什么样的考虑创建 Spring Boot ...

  9. Spring Boot 是什么?

    Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热,那么, Spring Boot 诞生的背景是什么?Spring 企业又是基于什么样的考虑创建 Spring Boot ...

随机推荐

  1. UINavigationController详解一(转)UIBarButtonItem

    本文出自:http://www.cnblogs.com/smileEvday/archive/2012/05/14/2495153.html 特别感谢. 1.UINavigationControlle ...

  2. COM编程之二 接口

    [1]接口 DLL的接口是它所输出的那些函数. C++类的接口是该类的一个成员函数集. COM接口是包含一个函数指针数组的内存结构. 每一个数组元素包含的是一个由组件所实现的函数的地址. 在COM中接 ...

  3. Backup: Array in Perl6

    Array in Perl6 继承List,而List又继承Iterable,Positional,Cool ARRAY.pop ARRAY.shift ARRAY.push: VALUES ARRA ...

  4. 使用163CentOS镜像

    CentOS镜像使用帮助 收录架构 i386 x86_64 SRPMS 收录版本 5 6 更新时间 每5小时更新一次   使用说明 首先备份/etc/yum.repos.d/CentOS-Base.r ...

  5. Sqoop安装及操作

    一.集群环境: Hostname IP Hadoop版本 Hadoop 功能 系统 node1 192.168.1.151 0.20.0 namenode hive+sqoop rhel5.4X86 ...

  6. mysql 关联条件与查询(过滤)条件

    mysql用outer join时 on 后边只是关联条件,有时可能会查出无用的记录, 需用where查询条件过滤 五欧诺个的数据. 记录一下

  7. git 本地分支与远程分支关联的一种方法

    github上已经有master分支 和dev分支 在本地 git checkout -b dev 新建并切换到本地dev分支 git pull origin dev 本地分支与远程分支相关联 在本地 ...

  8. bianwu 哈希表输出到 excel

    一.输出到excel 函数: protected void InputFileTheme(object[] Header,object [] DataFileds,string sql,string ...

  9. mysql btree与hash索引的适用场景和限制

    btree索引: 如果没有特别指明类型,多半说的就是btree索引,它使用btree数据结构来存储数据,大多数mysql引擎都支持这种索引,archive引擎是一个例外,5.1之前这个引擎不支持任何索 ...

  10. 64位系统安装ODBC驱动的方法

    为了更充分的利用硬件资源,我想很多人都开使用64位操作系统了,同时你可以也发现了在64位操作系统上ODBC的驱动找不到了,所以ODBC的东西都没法用了. 因为2007以前版本的Office只有32位版 ...