第一部分 核心概念
第1章 控制反转和容器
在本章中,你将学习至OIoC(Inversion ofControl,控制反转)的设计原则,这一原则被许多容器用来解耦组件之间的依赖关系。Spring Framework提供了一个强大、可扩展的IoC容器来管理组件,这个容器是Spring Framework的核心,同时也与Sprin9的其他模块紧密集成在一起。本章旨在提供Spring快速上手所需的必备知识。
当提至lJJava EE平台的组件时,大部分开发者都会想到EJB(Enterprise JavaBeans)。EJB规范明确地定义了EJB组件和EJB容器之间的契约。只要运行在EJB容器里,EJB组件就能获得生命周期管理、事务管理以及安全服务等诸多的好处。但是,在EJB 3.0版本发布之前,一个简单的EJB组件却需要编写远程/本地接口、Home接口以及Bean的实现类。这些EJB实在太复杂了,因此它们也被称为重量级组件。
此外,在这些EJB版本里,EJB组件不能脱离EJB容器运行,查找其他EJB组件也必须通过JNDI(JavaNaming and Directory Interface,Java命名和目录接口)。正因为EJB组件不能脱离EJB容器重用和测试,所以它们是依赖于特定技术的。
为克服EJB的缺点,许多轻量级容器诞生了。之所以称它们是轻量级容器,是因为它们能将简单的Java对象作为组件。但这些轻量级的容器也面临一个挑战,那就是如何解耦组件之间的依赖关系。对于这个问题,IoC被证明是一个有效的解决方案。
IoC是一个通用的设计原则,相比之下,DI(DependencyInjecfion,依赖注入)则是具体的设计模式,它体现了IoC的设计原则。因为Dl是IoC最典型的实现(但不是唯一的实现),所以术语IoC和DI经常混用。
通过本章的学习,你将能够编写简单的IoC容器,这个容器在概念上与Spring IoC容器是类似的。如果你已经熟悉IoC,则可以略过本章,直接跳到第2章,第2章将介绍Spring Framework的总体架构和设置。
1.1 使用容器管理组件
1.1.1 问题描述
面向对象设计的基本思想是将系统分解成一组可重用的对象。如果没有一个核心模块来管理这些对象,它们将不得不各自创建和管理自己的依赖。结果就是这些对象会紧紧地耦合在一起。
展开
——DamOdar Chetty.Software Engineering Solutions,Inc.
“我很少发表评论,但这次是例外。这是迄今为止最好的图书,你一定会手不释卷。此书可读性极好,内容结构严谨有序。我真的很惊奇,它怎么能够如此详细。”
——Amazon.com评论