编辑: 山南水北 | 2017-10-12 |
0 http://xglw.51.net/5team/springframework Spring reference 中文版 1.0 1.
第一章.简介 1.1.轻量级容器 这章内容没什么价值,需要修正 最近,许多人对我们所说的 轻量级容器 表现出兴趣.我们认为这是一个趋势.轻量级容器对 于web 应用的意义尤为明显;
但对于其他类型的应用 (包括在 J2EE 环境中运行的应用和独立的应用) 来说,轻量级容器也有助于提高它们的复用程度,例如业务对象和数据访问对象(DAO)的复用. 什么是轻量级容器? EJB 可能是最好的反例: 1. 侵略性的 API(你的代码依赖于 EJB) 2. 对容器的依赖(你的代码不能在 EJB 容器之外工作) 3. 只提供固定的一组功能,不具备配置能力 4. 5. 启动时间长 6. 部署过程取决于特定的产品,无法通用 轻量级容器的目标是避免上面所有这些麻烦事情. 1.2.几句闲谈 在这里多谈谈 Spring! 2.
第二章.高层面概述 2.1.简介 简单地说,Spring 是一个以控制倒置(Inversion of Control)原则为基础的轻量级框架.控制 倒置是一个用于 基于组件的体系结构 的设计模式,它将 判断依赖关系 的职责移交给容器,而 不是由组件本身来判断彼此之间的依赖关系.当在 Spring 内实现组件时, 容器 轻量级 的方面就 展现出来了:针对 Spring 开发的组件不需要任何外部库;
而且, 容器是轻量级的,它避免了像 EJB 容器那样的重量级方案的主要缺点,例如启动时间长、测试复杂、部署和配置困难,等等. 这一章首先介绍了轻量级容器的总体设计,随后将简单介绍 Spring 除IoC 实现之外的特性.简 单说,这些特性包括: * 内置 AOP 支持,例如在 EJB 容器之外提供声明式事务管理 http://xglw.51.net/5team/springframework Spring reference 中文版 1.0 * 数据访问框架,支持 JDBC 和O/R mapping 产品(例如 Hibernate) * 与Spring framework 其他功能完全集成的 MVC web 框架,提供一种清晰、无侵略性 的MVC 实现方式,使你无须绑定任何一种特定的视图技术 * 用JavaMail 或其他邮件系统发送邮件的支持 * 源代码级别的元数据支持,使开发者可以借助 AOP 之类的技术进行企业服务建模 * JNDI 抽象层,便于改变实现细节,例如透明地在远程服务和本地服务之间切换 此外,这一章将指导你 什么时候为特定的项目选择 Spring .对于 Spring 和IoC 的一些 优势(以及缺陷),本章也将提供整体性的概述. 3.
第三章.Bean相关包 3.1.介绍 TODO:我的看法是作一个概括性的描述,帮助读者基本了解 beans 包能做些什么.然而,如你所 见,这是一件非常困难的事……我必须作更多的考量……这需要增加更多关于 IOC 的信息,以及一些 有关 type2 和type3 的资料…… Spring 的核心是 org.springframework.beans 包,为使用 JavaBeans 技术、按名检索对象及管 理对象间的关系而设计.beans 包及其子包提供的功能为使用 JavaBeans 技术的项目指定了一个基础 设施. 关于 beans 包, 有三个重要的概念. 首先, 它提供了设置/读取 Javabeans 属性功能的 BeanWrapper 接口.第二个重要概念是 Bean 工厂.BeanFactory 是一个泛化工厂,具有实例化对象和管理不同对 象间关系的能力. BeanFactory 可以管理几种不同类型的 bean, 并且支持串行化及其他生命周期方法. BeanFactory 是按照 bean 定义(BeanDefinition)来实例化对象的.BeanDefinition,顾名思义, 是你对 bean 的定义.BeanDefinition 不仅定义了 bean 的类结构、实例化的方式,还定义了 bean 在 运行时的合作者.这是第三个概念.这三个概念(BeanFactory, BeanWrapper and BeanDefinition) 将在下文详细讨论. 3.2.使用 BeanWrapper 接口操作 Bean 对于 org.springframework.beans 包遵循 Sun 公司发布的 JavaBeans 标准.所谓 JavaBean 其 实就是一个 Java 类. 不过, 它必须拥有默认无参数构造器, 并按照既定规则来命名属性――属性 prop 对应一个设置器 setProp(…)和读取器 getProp(…).更多的关于 JavaBeans 的信息请查阅 Sun 公司 网站(java.sun.com/products/javabeans[http://java.sun.com/products/javabeans/]). 一个对于benas包非常重要的概念是BeanWrapper接口及与之对应的实现 (BeanWrapperImpl类) . 如JavaDoc 中所载,BeanWrapper 接口提供了设置和读取属性值、获得属性描述以及查询属性是否可 读写的功能. BeanWrapper 也提供了嵌套属性的支持, 允许设置无限深度的子属性. 同时, BeanWrapper 接口还允许你加入标准 JavaBeans 规范中的 PropertyChangeListeners 接口和 http://xglw.51.net/5team/springframework Spring reference 中文版 1.0 VetoableChangeListeners 接口,从而提供订阅属性变化消息和否决属性变化通知的能力,而不需要 在目标类中加入额外的支持代码.最后,BeanWrapper 接口提供了按索引随机设置带索引属性(例如 类型为 List 或数组的属性)的支持.BeanWrapper 接口通常并不是直接在应用程序代码中使用,而 是由 DataBinder 接口和 BeanFactory 管理. BeanWrapper 接口的这种工作方式多少就如它的名字所暗示的:对bean 进行包装,然后对包装 后的 bean 加以操作,例如设置属性值、检索属性值等等. 3.2.1. 设置和读取基本属性及嵌套属性 设置和读取属性分别通过 setPropertyValue(s)方法和 getPropertyValue(s)方法来完成.为了 方便使用,这两个方法都有几个重载版本.有关这两组方法的详尽描述在 Spring 的JavaDoc 中给出. 在这里,你有必要首先了解 标识对象的属性 的几种命名规则.下面是几个例子: Table 3.1. Examples of properties 表达式 说明 name 表示属性 name ,对应的方法是 getName()或者 isName()或者 setName() account.name 表示属性 account 的嵌套属性 name ,对应的方法是 getAccount().setName()或者 getAccount().getName() account[2] 表示带索引属性 account 的第三个元素.带索引属性可以是 array 类型、list 类型或者其他普通的 collection 下面你会找到几个使用 BeanWrapper 接口读取和设置属性的例子. 注意:假如你不打算直接使用 BeanWrapper 接口的话,这个部分对你来说并不太重要.假如你只 打算使用 DataBinder 和BeanFactory 公开提供的功能,请放心地跳过这些例子,直接进入有关 PropertyEditors 的内容. 考虑如下两个类: public class Company { private String name;