1.为何要学习spring?java
1.1设计理念和目标web
首先要了解spring的设计理念和目标,能够这么说,spring为开发者提供的是一个一站式的轻量级应用开发框架(平台),做为平台,spring抽象了咱们算法
在许多应用开发中遇到的共性问题,同时,做为一个轻量级的应用开发框架,spring和传统的J2EE开发相比,有其自身的特色,经过这些自身的特色spring
充分体现了它的设计理念:在java EE的应用开发中,支持POJO和使用JavaBean的开发方式,使应用面向接口开发,充分支持OO(面向对象)的设计方 式。数据库
好比,在java EE应用开发中,传统的EJB开发须要依赖按照J2EE规范实现的J2EE应用服务器,咱们的应用在设计,特别是实现时,每每须要一系列的接口标 准 才可以在应用服务器的环境中获得测试和部署,这种开发方式,使应用在可测试性和部署上都会受到一些影响,spring的设计理念采用了相对EJB而言的 轻量级开发思想,即便用POJO的开发方式,只须要使用简单的java对象或者JavaBean就能进行Java EE开发,这样开发入门,测试,应用部署都获得了简化编程
另外一方面,在咱们的应用开发中,每每会涉及复杂的对象耦合关系,若是在java代码中处理这些耦合关系,对代码的维护性和应用扩展性会带来不少不便数组
而若是使用spring做为应用开发平台,经过使用spring的IOC容器,能够对这些耦合关系实现一个文本化,外部化的工做,也就是说,经过一个或几个XML服务器
文件,就能够方便地对应用对象的耦合关系进行浏览,修改和维护,这样,能够很大程度简化应用开发,同时,经过IOC容器的依赖反转,把依赖关系的管理架构
从java对象中解放出来,交给了IOC容器来完成,从何完成了对象直接的关系解耦,原来对象——对象的关系,转化为对象——IOC容器——对象的关系框架
做为应用平台,spring与UNIX/WINDOWS这样传统意义的操做系统在计算机的做用相似,即做为用户和机器之间的平台,同时为用户使用底层的机器资源提 供了应用开发环境,,不一样点在于,操做系统关心得是对存储,计算,通讯,外围设备等物理资源的管理,并在管理的基础之上,给用户提供了一个统一的 服务接口,而对于spring这样的javaEE企业应用开发,其关心的是一些企业应用资源的使用,好比数据的持久化 ,数据集成,事务处理,消息中间件,web 应用,分布式计算等对高校可靠处理企业数据方法的技术抽象,虽然开发模式不一样,但出发点是同样的
从理解应用开发和应用平台二者的关系角度出发,能够换一种视角体会spring的设计理念,在设计上把spring划分为核心,组件和应用3个基本层次
1.2层次划分与核心部分
在这样的层次划分中,首先会看到,spring体系的核心,相似操做系统的Kernel(核心),即IOC容器和AOP模块,那么对于操做系统的Kernel来讲,进程调度器的设计是其关键部分,经过进程调度器,一方面使用“进程”这个概念来抽象物理的计算资源,另外一方面,能够经过调度算法的设计来实现对计算资源的高效使用。对spring来讲,一方面,经过IOC容器来管理POJO对象,以及他们相互之间的耦合关系,使企业的数据资源能够经过简单的java语音来抽象和描述,另外一方面,能够经过AOP,以动态和非侵入式的方式来加强功能,做为核心,咱们能够把IOC容器和AOP模块看作spring的Kernel ,是平台实现的核心部分
1.3spring的体系
另外,在spring的体系中,咱们还会看到,在IOC容器和AOP这两个核心模块的支持下,spring简化了Java EE所进行的开发,这种简化指,咱们可以再也不 EJB 这么厚重的环境中,使用javaEE 的基本服务,为应用开发提供了许多即开即用的系统组件和服务,这些服务涵盖了javaEE的各个基本服务,对于其余的服 务 也能够动态的扩展到spring体系中(只要依据IOC和AOP所约定好的特定模式),在spring体系中能够包括咱们不少常常用到的服务,好比事务处理,WEB MVC,JDBC,ORM,远端调用,从对用户的价值,这些服务相对来讲是不可忽视的
2 了解spring的总体架构
2.1spring框架是一个分层架构,它包含一系列的功能要素,并被分为大约20个模块。
这些模块被总结为如下几个部分。
(1)Core Container
Core Container(核心容器)包含有Core、Beans、Context和Expression Language模块。
Core和Beans模块是框架的基础部分,提供IOC(控制反转)和依赖注入特性。这里的基础概念是BeanFactory,它提供了Factory模式的经典实现来消除对程 序性单例模式的须要,并真正的容许你从程序逻辑中分离出依赖关系和配置。
Core模块主要包含spring框架基本的核心工具类,spring的其余组件都要使用到这个包里的类,core模块是其余组件的基本核心。固然你也能够在本身的应 用系统中使用这些工具类,Beans模块是全部应用都要用到的,它包含访问配置文件、建立和管理bean以及进行Inversion of Control/ Dependency Injection操做相关的全部类。
Context模块构建于Core和Beans模块基础之上,提供了一种相似于JNDI注册器的框架式的对象访问方法。Context模块继承了Beans的特性,为了spring核心 提供了大量扩展,添加了对国际化、时间传播、资源加载个对Context的透明建立的支持。ApplicationContext接口是Context模块的关键。
Expression Language模块提供了一个强大的表达式语言用于在运行时查询和操纵对象。该语言支持设置/获取属性的值,属性的分配,方法的调用,访问数组上下文、容器和索引器、逻辑和算术运算符以及从spring的IOC容器中根据名称检索对象。
(2) Data Access(数据访问)/Integration(集成)
Data Access/Integration层包含有JDBC、ORM、OXM、JMS和Transaction模块。
JDBC模块提供了一个JDBC抽象层,它能够消除冗长的JDBC编码和解析数据库厂商特有的错误代码。这个模块包含了spring对JDBC数据访问进行封装的全部类。
ORM:利用ORM封装包,能够混合使用全部Spring提供的特性进行O/R映射。
OXM:提供了一个对Object/XMl映射实现的抽象层。
JMS:提供了一些制造和消费消息的特性。
Transaction:支持编程和生命性的事务管理,这些事务类必须实现特定的接口,而且对全部的POJO都适用