- Spring 是什么
Spring是一个开源的轻量级Java SE(Java 标准版本号)/Java EE(Java 企业版本号)开发应用框架,其目的是用于简化企业级应用程序开发。应用程序是由一组相互协作的对象组成。
而在传统应用程序开发中,一个完整的应用是由一组相互协作的对象组成。
所以开发一个应用除了要开发业务逻辑之外,最多的是关注怎样使这些对象协作来完毕所需功能,并且要低耦合、高内聚。
业务逻辑开发是不可避免的,那假设有个框架出来帮我们来创建对象及管理这些对象之间的依赖关系。
可能有人说了。比方“抽象工厂、工厂方法设计模式”不也能够帮我们创建对象。“生成器模式”帮我们处理对象间的依赖关系,不也能完毕这些功能吗?但是这些又须要我们创建还有一些工厂类、生成器类,我们又要另外管理这些类。添加了我们的负担,假设能通过配置方式来创建对象,管理对象之间依赖关系。我们不须要通过工厂和生成器来创建及管理对象之间的依赖关系,这样我们是不是降低了很多工作,加速了开发。能节省出很多时间来干其它事。Spring框架刚出来时主要就是来完毕这个功能。
Spring框架除了帮我们管理对象及其依赖关系,还提供像通用日志记录、性能统计、安全控制、异常处理等面向切面的能力,还能帮我们管理最头疼的数据库事务。它本身提供了一套简单的JDBC訪问实现,还能与第三方数据库訪问框架集成(如Hibernate、JPA)。与各种Java EE技术整合(如Java Mail、任务调度等等),提供一套自己的web层框架Spring MVC、并且还能很简单的与第三方web框架集成。
从这里我们能够觉得Spring是一个超级粘合平台,除了自己提供功能外,还提供粘合其它技术和框架的能力,从而使我们能够更自由的选择究竟使用什么技术进行开发。并且无论是JAVA SE(C/S架构)应用程序还是JAVA EE(B/S架构)应用程序都能够使用这个平台进行开发。
让我们来深入看一下Spring究竟能帮我们做些什么?
2、 Spring 能帮我们做什么
Spring除了不能帮我们写业务逻辑,其余的差点儿什么都能帮助我们简化开发:
传统程序开发,创建对象及组装对象间依赖关系由我们在程序内部进行控制,这样会加大各个对象间的耦合,假设我们要改动对象间的依赖关系就必须改动源码,又一次编译、部署。而假设採用Spring,则由Spring依据配置文件来进行创建及组装对象间依赖关系,仅仅须要改配置文件就可以,无需又一次编译。
所以。Spring能帮我们依据配置文件创建及组装对象之间的依赖关系。
当我们要进行一些日志记录、权限控制、性能统计等时,在传统应用程序其中我们可能在须要的对象或方法中进行,并且比方权限控制、性能统计大部分是反复的,这样代码中就存在大量反复代码,即使有人说我把通用部分提取出来,那必定存在调用还是存在反复,像性能统计我们可能仅仅是在必要时才进行,在诊断完毕后要删除这些代码。还有日志记录,比方记录一些方法訪问日志、数据訪问日志等等,这些都会渗透到各个訪问方法中。还有权限控制。必须在方法运行開始进行审核,想想这些是多么可怕并且是多么无聊的工作。
假设採用Spring,这些日志记录、权限控制、性能统计从业务逻辑中分离出来,通过Spring支持的面向切面编程。在须要这些功能的地方动态加入这些功能。无需渗透到各个须要的方法或对象中。有人可能说了,我们能够使用“代理设计模式”或“包装器设计模式”,你能够使用这些。但还是须要通过编程方式来创建代理对象。还是要耦合这些代理对象,而採用Spring 面向切面编程能提供一种更好的方式来完毕上述功能。一般通过配置方式,并且不须要在现有代码中加入不论什么额外代码。现有代码专注业务逻辑。
所以,Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。
在传统应用程序其中,我们怎样来完毕数据库事务管理?须要一系列“获取连接,运行SQL。提交或回滚事务,关闭连接”,并且还要保证在最后一定要关闭连接,多么可怕的事情,并且也很无聊;假设採用Spring。我们仅仅需获取连接,运行SQL。其它的都交给Spring来管理了,简单吧。所以,Spring能很简单的帮我们管理数据库事务。
Spring还能与第三方数据库訪问框架(如Hibernate、JPA)无缝集成,并且自己也提供了一套JDBC訪问模板,来方便数据库訪问。
Spring还能与第三方Web(如Struts、JSF)框架无缝集成,并且自己也提供了一套Spring MVC框架。来方便web层搭建。
Spring能方便的与Java EE(如Java Mail、任务调度)整合。与很多其它技术整合(比方缓存框架)。
Spring能帮我们做这么多事情。提供这么多功能和与那么多主流技术整合,并且是帮我们做了开发中比較头疼和困难的事情,那可能有人会问,难道仅仅有Spring这一个框架,没有其它选择?当然有,比方EJB须要依赖应用server、开发效率低、在开发中小型项目是宰鸡拿牛刀。尽管发展到如今,EJB已经比較好用了。但还是比較笨重还须要依赖应用server等。那为何须要使用Spring。而不是其它框架呢?让我们接着往下看。
3、 为何须要 Spring
(1)首先阐述几个概念
应用程序:是能完毕我们所须要功能的成品,比方购物站点、OA系统。
- 框架:是能完毕一定功能的半成品,比方我们能够使用框架进行购物站点开发。框架做一部分功能。我们自己做一部分功能。这样应用程序就创建出来了。并且框架规定了你在开发应用程序时的总体架构,提供了一些基础功能,还规定了类和对象的怎样创建、怎样协作等,从而简化我们开发,让我们专注于业务逻辑开发。
- 非侵入式设计:从框架角度能够这样理解,无需继承框架提供的类,这样的设计就能够看作是非侵入式设计,假设继承了这些框架类,就是侵入设计,假设以后想更换框架,之前写过的代码差点儿无法重用,假设非侵入式设计则之前写过的代码仍然能够继续使用。
- 轻量级及重量级:轻量级是相对于重量级而言的,轻量级一般就是非入侵性的、所依赖的东西很少、资源占用很少、部署简单等等。事实上就是比較easy使用。而重量级正好相反。
- POJO:POJO(Plain Old Java Objects)简单的Java对象,它能够包括业务逻辑或持久化逻辑,但不担当不论什么特殊角色且不继承或不实现不论什么其它Java框架的类或接口。
- 容器:在日常生活中容器就是一种盛放东西的器具。从程序设计角度看就是装对象的的对象,由于存在放入、拿出等操作,所以容器还要管理对象的生命周期。
- 控制反转:即Inversion of Control,缩写为IoC,控制反转还有一个名字叫做依赖注入(Dependency Injection)。就是由容器控制程序之间的关系,而非传统实现中。由程序代码直接操控。
- Bean:一般指容器管理对象,在Spring中指Spring IoC容器管理对象。
(2)为什么须要 Spring 及 Spring 的长处
- 很轻量级的容器:以集中的、自己主动化的方式进行应用程序对象创建和装配。负责对象创建和装配,管理对象生命周期。能组合成复杂的应用程序。Spring容器是非侵入式的(不须要依赖不论什么Spring特定类),并且全然採用POJOs进行开发。使应用程序更easy測试、更easy管理。
并且核心JAR包很小,Spring3.0.5不到1M,并且不须要依赖不论什么应用server。能够部署在不论什么环境(Java SE或Java EE)。
- AOP:AOP是Aspect Oriented Programming的缩写,意思是面向切面编程,提供从还有一个角度来考虑程序结构以完好面向对象编程(相对于OOP)。即能够通过在编译期间、装载期间或运行期间实如今不改动源码的情况下给程序动态加入功能的一种技术。通俗点说就是把可重用的功能提取出来,然后将这些通用功能在合适的时候织入到应用程序中;比方安全,日志记录,这些都是通用的功能。我们能够把它们提取出来,然后在程序运行的合适地方织入这些代码并运行它们。从而完毕须要的功能并复用了这些功能。
- 简单的数据库事务管理:在使用数据库的应用程序其中,自己管理数据库事务是一项很让人头疼的事,并且很easy出现错误,Spring支持可插入的事务管理支持,并且无需JavaEE环境支持,通过Spring管理事务能够把我们从事务管理中解放出来来专注业务逻辑。
- JDBC抽象及ORM框架支持:Spring使JDBC更加easy使用。提供DAO(数据訪问对象)支持,很方便集成第三方ORM框架,比方Hibernate等;并且全然支持Spring事务和使用Spring提供的一致的异常体系。
- 灵活的Web层支持:Spring本身提供一套很强大的MVC框架。并且能够很easy的与第三方MVC框架集成,比方Struts等。
- 简化各种技术集成:提供对Java Mail、任务调度、JMX、JMS、JNDI、EJB、动态语言、远程訪问、Web Service等的集成。
Spring能帮助我们简化应用程序开发。帮助我们创建和组装对象,为我们管理事务,简单的MVC框架,能够把Spring看作是一个超级粘合平台,能把很多技术整合在一起,形成一个总体,使系统结构更优良、性能更出众,从而加速我们程序开发。有如上长处,我们没有理由不考虑使用它。
4、 怎样学好 Spring
- 要学好Spring。首先要明白Spring是个什么东西。能帮我们做些什么事情。知道了这些然后做个简单的样例。这样就基本知道怎么使用Spring了。Spring核心是IoC容器,所以一定要透彻理解什么是IoC容器。以及怎样配置及使用容器。其它全部技术都是基于容器实现的;理解好IoC后,接下来是面向切面编程,首先还是明白概念,基本配置。最后是实现原理,接下来就是数据库事务管理。事实上Spring管理事务是通过面向切面编程实现的,所以基础很重要,IoC容器和面向切面编程搞定后,其余都是基于这俩东西的实现。学起来就更加轻松了。
要学好Spring不能急,一定要把基础打牢。基础坚固了,学起来就会很快。这就是磨刀不误砍柴工。