1.为什么要学习spring?
1.1设计理念和目标
首先要了解spring的设计理念和目标,可以这么说,spring为开发者提供的是一个一站式的轻量级应用开发框架(平台),作为平台,spring抽象了我们
在许多应用开发中遇到的共性问题,同时,作为一个轻量级的应用开发框架,spring和传统的J2EE开发相比,有其自身的特点,通过这些自身的特点
充分体现了它的设计理念:在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都适用
来源:oschina
链接:https://my.oschina.net/u/4196595/blog/3183058