Spring实战4
第1部分 Spring的核心
第1章 Spring之旅
- Spring的bean容器
- 介绍Spring的核心模块
- 更为强大的Spring生态系统
- Spring的新功能
1.1 简化Java开发
为了降低Java开发的复杂性,Spring采取了以下4中关键策略:
- 基于POJO(Plain Old Java object)的轻量级和最小侵入性编程;
- 通过依赖注入(DI)和面向接口实现松耦合;
- 基于切面和惯例进行声明式编程;
- 通过切面和模板减少样板式代码。
1.1.1 激发POJO的潜能
- 在基于Spring构建的应用中,它的类通常没有任何痕迹表明你使用了Spring。最坏的场景是,一个类或许会使用Spring注解,但它依旧是POJO。
- Spring赋予POJO魔力的方式之一就是通过DI来装配它们。保持对象之间的松耦合
1.1.2 依赖注入
- 耦合是必须的,但要谨慎管理
- 构造器注入(constructor injection),依赖注入的方式之一,传入接口,实现松耦合
- 对依赖进行替换的一个最常用方法就是在测试的时候使用mock实现
- 创建应用组件之间协作的行为称为装配(wiring)。Spring有多种装配bean的方式,采用XML是很常见的一种装配方式。
- Spring还支持使用Java来描述配置
- Spring通过应用上下文(Application Context)装载bean的定义并把它们组装起来
1.1.3 应用切面
-
DI能够让相互协作的软件组件保持松散耦合,而面向切面编程(aspect-oriented programming,AOP)允许你把遍布应用各处的功能分离出来 形成可重用的组件。
-
面向切面编程往往被定义为促使软件系统实现关注点分离的一项技术。
-
跨越系统的多个组件的系统服务通常被称为横切关注点。如日志、事务管理和安全。
-
AOP能够使这些服务模块化,并以声明的方式将它们应用到它们需要影响的组件中去。所造成的结果就是这些组件会具有更高的内聚性并且会 更加关注自身的业务,完全不需要了解涉及系统服务所带来复杂性。
-
借助AOP,可以使用 各种功能层去包裹核心业务层。
-
AOP应用
1.1.4 使用模板消除样板式代码
- 由Java API导致的样板式代码,导致重复代码,在Java开发时随处可见,如JDBC
- Spring旨在通过模板封装来消除样板式代码。Spring的JdbcTemplate使得执行数据库操作时,避免传统的JDBC样板代码成为了可能
1.2 容纳你的Bean
-
在Spring应用中,对象由Spring容器创建和装配,并存在容器之中
-
容器时Spring框架的核心。Spring容器使用DI管理构成应用的组件,它会创建相互协作的组件之间的关联。
-
Spring容器类型:
- bean工厂(BeanFactory):最简单的容器,提供基本的DI支持
- 应用上下文(ApplicationContext):基于BeanFactory构建,并提供应用框架级别的服务
1.2.1 使用应用上下文
- Spring自带了多种类型的应用上下文:
- AnnotationConfigApplicationContext:从一个或多个基于Java的配置类中加载Spring应用上下文。
- AnnotationConfigWebApplicationContext:从一个或多个基于Java的配置类中加载Spring Web应用上下文。
- ClassPathXmlApplicationContext:从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源。
- FileSystemXmlApplicationContext:从文件系统下的一个或多个XML配置文件中加载上下文定义。
- XmlWebApplicationContext:从Web应用下的一个或多个XML配置文件中加载上下文定义。
- 应用上下文准备就绪之后,就可以调用上下文的getBean()方法从Spring容器中获取bean。
1.2.2 bean的生命周期
1.3 俯瞰Spring风景线
1.3.1 Spring模块
-
Spring核心容器
- 容器是Spring框架最核心的部分,它管理着Spring应用中bean的创建、配置和管理。
- 除了bean工厂和应用上下文,该模块也提供了许多企业服务,例如E-mail、JNDI访问、EJB集成和调度。
- 所有的Spring模块都构建于核心容器之上。
-
Spring的 AOP模块
- 在AOP模块中,Spring对面向切面编程提供了丰富的支持。
- 这个模块是Spring应用系统中开发切面的基础。
-
数据访问与集成
- Spring的JDBC和 DAO(Data Access Object)模块抽象了样板式代码,使我们的数据库代码变得简单明。
- Spring对许多流行的 ORM框架进行了集成,提供了ORM模块。Spring的ORM模块建立在对DAO的支持之上,并为多个ORM框架提供了一种构建DAO的简便方式。
-
Web与远程调用
- Spring提供一个MVC框架
- 集成了好几种远程调用框架,自带一个框架:HTTP invoker
-
Instrumentation
Instrumentation模块提供了为JVM添加代理(agent)的功能。 -
测试
测试模块用于对Spring应用的测试
1.3.2 Spring Portfolio
整个Spring Portfolio包括多个构建于核心Spring框架之上的框架和类库。概括地讲,整个Spring Portfolio几乎为每一个领域的Java开发都提供了Spring编程模型。
- Spring Web Flow
Spring Web Flow建立于Spring MVC框架之上,它为基于流程的会话式Web应用(可以想一下购物车或者向导功能)提供了支持。 - Spring Web Service
Spring Web Service提供了契约优先的Web Service模型,服务的实现都 是为了满足服务的契约而编写的。 - Spring Security
安全对于许多应用都是一个非常关键的切面。利用Spring AOP,Spring Security为Spring应用提供了声明式的安全机制。 - Spring Integration
许多企业级应用都需要与其他应用进行交互。Spring Integration提供了多种通用应用集成模式的Spring声明式风格实现。 - Spring Batch
当我们需要对数据进行大量操作时,没有任何技术可以比批处理更胜任这种场景。如果需要开发一个批处理应用,你可以通过Spring Batch, 使用Spring强大的面向POJO的编程模型。 - Spring Data
Spring Data使得在Spring中使用任何数据库都变得非常容易,为持久化提供了一种简单的编程模型。 - Spring Social
Spring的一个社交网络扩展模块,更多的是关注连接(connect),而不是社交(social) - Spring Mobile
Spring Mobile是Spring MVC新的扩展模 块,用于支持移动Web应用开发。 - Spring for Android
通过Spring框架为开发基于Android设备的本地应用提供某些简单的支持。 - Spring Boot
Spring Boot致力于简化Spring本身。
Spring Boot大量依赖于自动配置技术,它能够消除大部分(在很多场景中,甚至是全部)Spring配置。它还提供了多个Starter项目,不管你使 用Maven还是Gradle,这都能减少Spring工程构建文件的大小。
1.4 Spring的新功能
1.5 小结
Spring致力于简化企业级Java开发,促进代码的松散耦合。成功的关键在于依赖注入和AOP。