1 Spring 框架概括
Spring 是一个开源框架,本来是为了解决企业应用开发复杂性而构建的,但现在已经不止用于企业应用了,它是一个轻量级的控制反转(IoC)和面向切面(AOP)的**容器**框架。
1.1 DI(依赖注入)
在编写项目代码的时候,按照传统的做法,每个对象负责管理与自己互相协作的对象的引用,这将会导致高度耦合和难以测试的代码。
而通过 Spring 的 DI(依赖注入),对象的依赖关系将由系统中负责协调各对象的第三方组件在创建对象的时候进行设定,此时对象就无需自行创建或管理它们的依赖关系。
要注意的是,使用依赖注入的时候就应该像使用 接口 一样,在主程序中不应该与任何特定的注入对象的实现发生耦合。
Spring 通过依赖注入和面向接口实现松耦合
1.2 应用切面
DI 能够让相互协作的软件组件保持松散耦合,而面向切面编程(AOP)允许你把遍布应用各处的功能分离出来形成可重用的组件。诸如日志,事务管理和安全等这些系统服务经常融入到自身具有核心业务逻辑的组件中(最经常的就是连接数据库获取数据),这些系统服务通常被称为 横切关注点,而AOP能够将这些服务模块化,并以声明的方式将它们应用到它们需要影响的组件中去。
这样造成的结果就是这些组件会具有更高的内聚性可以更加关注自身的业务,完全不需要了解涉及系统服务所带来的复杂性。
1.3 使用切面和模板消除样板式代码
常见的样板式代码之一就是:使用 JDBC 访问数据库查询数据,通常的,首先需要创建一个数据库连接,再创建一个语句对象,然后进行查询,还要捕捉 SQLException
,最后还需要关闭数据库连接。就这样,每查询一次数据,就要写这么一大堆东西,结果可能唯一不同的就是 sql 语句,此时 Spring 的 JdbcTemplate 样板代码就可以用上手了。
1.4 Spring 容器
在 Spring 的应用中,你的应用对象生产砸iSpring 容器中。
Spring 容器负责创建对象,装配对象,配置它们并管理它们的整个生命周期。
Spring 容器并不是只有一个,Spring 自带多个容器实现,可以归为两种不同的类型:
- bean 工厂(
org.springframework.beans.factory.beanFactory
):对于绝大多数的应用过于低级 - 应用上下文(
org.springframework.context.ApplicationContext
):基于 bean 工厂构建
1.4.1 使用应用上下文
Spring 自带多种类型的应用上下文,下面罗列的几种是最常用到的:
AnnotationConfigApplicationContext
:从一个或多个基于 Java 的配置类中加载 Spirng 应用上下文AnnotationConfigWebApplicationContext
:从一个或多个基于 Java 的配置类中加载 Spirng Web应用上下文ClassPathXmlApplicationContext
:从 类路径下 的一个或多个 XML 配置文件中加载上下文定义FileSystemXmlApplicationContext
:从 文件系统下 的一个或多个 XML 配置文件中加载上下文定义XmlWebApplicationContext
:从 Web 应用下的一个或多个 XML 配置文件中加载上下文定义