本章内容:
简化Java
Spring使用Bean或JavaBean来表示应用组件。应用组件可被重用并轻松构建复杂的应用,Spring组件可以是任何形式的POJO。为简化Java开发,Spring采取了以下四种关键策略:
POJO
POJO:Plain Ordinary Java Object,简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。
依赖注入(Dependency Injection)
Spring不强制要求实现接口或继承规范类,而是通过注入依赖帮助应用对象彼此间保持松散耦合。 2.依赖注入通过接口(而不是具体实现或初始化的过程)来表明依赖关系使代码简单、易理解、易测试。
书中通过挑战DamselRescuingQuest还是Quest构建勇士演示了构造器注入依赖的方法。并利用@Test和mock()方法实现测试。
创建应用组件之间协作的行为称为装配,Spring常采用XML配置来装配Bean:
Spring通过应用上下文(Application Context)负责对象的创建和组装,即装载Bean的定义并组装它们。如图为加载上下文并获取对象的引用:
应用切面
面向切面编程(AOP):实现分离功能形成可重用组件,通常组件负责特定功能(自身核心功能)且有可被分离的横切关注点负担(如日志、事务管理和安全等)。
AOP可实现横切关注点与核心业务逻辑相分离:
书中声明了吟唱诗人与骑士的关系引出了切面配置,勇士不必显式调用吟唱诗人。AOP与实现声明式事务和安全有关。
模板封装
样板式代码:与核心业务无关的大量重复代码。
Spring中的Bean容器
应用上下文
应用对象生存于Spring容器中,实现创建、装配、配置、管理整个生命周期。
Spring使用依赖注入管理组件并创建组件间的关联。
Spring容器分为两类:Bean工厂(过于简单)和应用上下文。
应用上下文容器:基于BeanFactory提供面向应用的服务,如从属性文件解析文本信息、为事件监听者发布应用事件。
Bean生命周期
Spring模块
容器
最核心的部分,可实现前两节中的相关内容,Spring所有模块都构建于核心容器之上。
AOP
着重于横向关注点
数据访问与集成
提供ORM模块(object-relational mapping)、支持DAO(Data Access Object)
Web和远程调用
MVC:分离用户界面逻辑与应用逻辑。 提供两种形式:基于Servlet框架的传统Web应用和基于Portlet的面向使用Java Portlet API
测试
Spring为JNDI、Servlet和Portlet编写了一系列模拟对象实现的单元测试,并可通过加载Spring应用上下文中的Bean集合与Spring上下文中的Bean的交互实现集成测试。