Spring框架应用
2.2.1 依赖注入
– 当某个Java实例(调用者)需要另一个Java实例(被调用者)时, 调用者自身需要负责实现这个获取过程——由程序内部代码来控制 对象之间的关系。我们已经熟悉的方式是调用者采用“new 构造方 法”的形式来创建被调用者以实现两个或多个对象的组合,但是这 种实现方式不仅会导致代码的耦合度高而且难于测试。一个好的设 计,不但要求代码尽可能多的实现复用,还要求组件之间尽量解耦。 而依赖注入的出现完美的解决了代码的高耦合度问题。
小结
– 本章主要介绍了Spring框架的基本知识,包括控制反转和依 赖注入,Spring框架的核心模块,以及Spring框架的配置等内 容,并通过SpringDemo实例使读者对使用Spring框架进行编 程有了一个初步的了解。
2. Spring之IoC原理与具体使用
– – ห้องสมุดไป่ตู้ 在实例项目中使用Spring Spring IoC原理简介 Spring IoC简单模拟实现
2.2.1 依赖注入
new 汽车
调用者
图2.3 调用者构造汽车对象
被调用者
通过Spring容器注入调用者
汽车
调用者 Spring容器
被调用者
图2.4 将汽车对象注入调用者对象
2.2.2 依赖注入的3种实现方式
• 依赖注入存在着三种实现方式,分别是设值注入、构造方法 注入和接口注入。
1.设值注入 设值注入是指IoC容器使用setter方法来注入被依赖的实例。通过调 用无参构造器或无参static工厂方法实例化bean之后,调用该bean 的setter方法,即可实现基于setter的DI。
1.1.1 Spring的基本概念
– Spring框架是基于Java平台的,它为应用程序的开发提供了全面的 基础设施支持。Spring专注于基础设施,这将使得开发者能更好的 致力于应用开发而不用去关心底层的架构。 Spring框架本身并未强制使用任何特别的编程模式。从设计上看, Spring框架给予了Java程序员许多自由度,但同时对业界存在的一 些常见问题也提供了规范的文档和易于使用的方法。 Spring框架的核心功能适用于任何Java应用。在基于Java企业平 台上的大量Web应用中,积极的拓展和改进已经形成。而Spring的 用途也不仅限于服务器端的开发,从简单性、可测试性和松耦合的 角度来说,任何Java应用都可以从Spring中获得好处。
1.1.1 Spring的基本概念
• 2.依赖注入(DI)和控制反转(IOC)
– – 依赖注入(Dependency Injection)和控制反转(Inversion of Control)实际上是同一个概念。 在传统的程序设计中,通常由调用者来创建被调用者的实例,而在 依赖注入或控制反转的定义中,调用者不负责被调用者的实例创建 工作,该工作由Spring框架中的容器来负责,它通过开发者的配置 来判断实例的类型,创建后再注入调用者。由于Spring容器负责创 建被调用者实例,实例创建后又负责将该实例注入调用者,因此称 为依赖注入(Dependency Injection);而被调用者的实例创建工作 不再由调用者来创建而是由Spring来创建,因此称为控制反转 (Inversion of Control)。
Spring框架应用
主要内容
– – – Spring框架基本知识 Spring框架开发准备 Spring框架开发实例
1.1 Spring基本知识
– Spring是Java平台上一个开源应用框架,它有着深厚的历史根基。 Spring最初起源于Rod Johnson于2002年所著的《Expert One-on-One: J2EE Design and Development》一书中的基础性代码。在该书中, Rod Johnson阐述了大量Spring框架的设计思想,并对J2EE平台进行了 深层次的思考,指出了EJB存在的结构臃肿的问题。他认为采用一种轻量 级的、基于JavaBean的框架就可以满足大多数程序开发的需要。 – 2003年,Rod Johnson公开了所描述框架的源代码,这个框架逐渐演变 成了我们所熟知的Spring框架。2004年3月发布的1.0版本是Spring的第 一个具有里程碑意义的版本。这个版本发布之后,Spring框架在Java社 区中变得异常流行。现在,Spring已经获得了广泛的欢迎,并被许多公司 认为是具有战略意义的重要框架。
–
–
–
1.3.2 Spring的IoC容器
– – 1.BeanFactory及其工作原理 BeanFactory在Spring中的作用至关重要,它实际上是一个用于配 置和管理Java类的内部接口,负责初始化各种Bean并调用它们的 生命周期方法。 Spring中提供了几种BeanFactory的实现方法,最常使用的是 org.springframework.beans.factory.xml.XmlBeanFactory,它 会根据XML配置文件中的定义来装配Bean。 创建BeanFactory实例时,需要提供Spring容器所管理的Bean的 详细配置信息。Spring的配置信息通常采用XML文件的形式来管理, 所以,在创建BeanFactory实例时,需要依据XML配置文件中提供 的信息。
2.1 在实例项目中使用Spring
– 【例16-1】在这个例子中, 创建一个HelloWorld类,用Spring来 实现在控制台上打印出“Hello World!”语句的功能。
2.2 深入理解依赖注入
2.2.1 依赖注入 – 依赖注入(Dependency Injection, DI)也被称为控制反转 (Inversion of Control,IoC)。早在2004年,Martin Fowler就 在论文《Inversion of Control Containers and the Dependency Injection pattern》中提出问题:“哪些方面的控制被反转了?”。 根据他的观点——是依赖对象的获得被反转了。于是他为控制反转 创造了一个更好的名字:依赖注入。 – 由此我们知道,依赖注入和控制反转的含义完全相同,只是从两个 角度来描述了同一个概念。对于一个Spring初学者来说,这两种说 法同样生涩难懂,因此,我们尝试用更加简单通用的语言和例子来 描述出这个概念。
–
–
1.1.1 Spring的基本概念
•
– – – – – –
1.Spring框架优势
Spring框架能有效地组织中间层对象。 Spring框架实现了真正意义上的面向接口编程,可实现组件之间的 高度解耦。 Spring所秉承的设计思想就是让使用Spring创建的那些应用都尽可 能少的依赖于它的APIs。 使用Spring构建的应用程序易于进行单元测试。 Spring提高了代码的可重用性,它尽可能避免在程序中硬编码。 Spring为数据存取提供了一个一致的框架,简化了底层数据库的访 问方式。
1.2.3 Spring框架配置
• 将commons-logging压缩包解压缩,打开其解压缩目录,可以看到 下图所示目录。
1.3 Spring开发实例
1.3.1 开发实例 【例15-1】下面通过该实例来介绍Spring框架程序的一般构建方式。
1.3.2 Spring的IoC容器
– Spring的IoC容器是一个提供IoC支持的轻量级容器,IoC容器为管理对象之 间的依赖关系提供了基础功能。Spring为我们提供了两种容器: BeanFactory和ApplicationContext。 BeanFactory由org.springframework.beans.factory.BeanFactory接口定 义,是基础类型的IoC容器,并能提供完整的IoC服务支持。IoC容器需要为 其具体的实现提供基本的功能规范,而BeanFactory接口则提供了该功能规 范的设计,每个具体的Spring IoC容器都要满足BeanFactory接口的定义。 ApplicationContext由 org.springframework.context.ApplicationContext接口定义,是以 BeanFactory为基础构建的。 此外,Spring还提供了BeanFactory和ApplicationContext的几种实现类, 它们也都称为Spring的容器。
1.1.1 Spring的基本概念
•
– –
3.面向切面编程(AOP)
AOP(Aspect-Oriented Programming),也就是面向切面编程,它是面 向对象编程(OOP)的补充和完善。 在OOP中通过封装、继承和多态性等概念建立起了多个对象之间的层次结 构,但当需要为这些分散的对象加入一些公共行为时,OOP就显得力不从 心了。换句话说就是,OOP擅长的是定义从上到下的关系,但是并不适合 定义从左到右的关系。 AOP的出现恰好解决了OOP技术的这种局限性。AOP利用了一种称为“横 切”的技术,将封装好的对象剖开,找出其中对多个对象产生影响的公共行 为,并将其封装为一个可重用的模块,这个模块被命名为“切面” (Aspect)。切面将那些与业务无关,却被业务模块共同调用的逻辑提取 并封装起来,减少了系统中的重复代码,降低了模块间的耦合度,同时提高 了系统的可维护性。
–
1.1.1 Spring的基本概念
• 4.日志
在Spring中,日志主要用来监控代码中变量的变化,跟踪代 码运行的轨迹,在开发环境中担当调试器,向控制台或文件 输出信息。在Spring框架中,日志记录是必不可少的,如果 没有对应的依赖包,会产生错误。
1.1.2 Spring框架模块
Spring框架遵从模块的架构方式,由总共20多个模块组成 ,包括核心容器﹑数据访问/集成﹑Web﹑AOP等。这些 模块为我们提供了开发企业级应用所需要的一切东西。在 开发过程中,这些模块并不都是必须的,可以针对具体的 应用自由选择所需要的模块。还可以将Spring与其他框架 或库进行集成,使得开发过程更有针对性更有效率。