Spring 基本概念

Wu Jun 2019-12-25 15:59:03
Categories: > Tags:

Spring 是一个开源的 Java EE 开发框架。Spring 框架的核心功能可以应用在任何 Java 应用程序中,但对 Java EE 平台上的 Web 应用程序有更好的扩展性。Spring 框架的目标是使得 Java EE 应用程序的开发更加简捷,通过使用 POJO 为基础的编程模型促进良好的编程风格。

1 Spring 基本理念

简化 Java 开发

2 Spring 基本原理

  1. 启动项目后,按照配置找到要 scan 的包(自动装配)
  2. 解析包里面的所有类,找到所有含有 @bean,@service 等注解的类,利用反射解析,封装成各种信息类放到容器(map 实现)里。
  3. 需要 bean 时,从容器里找。找到则通过构造器 new 出来(控制反转),没找到则抛出异常
  4. 如果类中有需要注入的,仍从 container 寻找、解析类,new 出对象,用 setter 注入(依赖注入)。
  5. 嵌套 bean 用了递归,container 会放到 servletcontext 里,每次 request 从 servletcontext 找 container。
  6. 如果 bean 的 scope 是 singleton,会重用,将这个 bean 放到一个 map 里,每次用都先从这个 map 里面找。
  7. 如果 scope 是 session,则该 bean 会放到 session 里面。

3 Spring 模块

Spring 4.0 有 20 个模块,这些模块依据其所属的功能可以划分为 6 类不同的功能

3.1 Spring 核心容器

最核心的部分。除了 BeanFactory 和 ApplicationContext,还提供 E-mail、 JNDI 访问、 EJB 集成和调度等服务。所有的 Spring 模块都构建于核心容器之上

3.2 面向切面编程

开发切面的基础。借助于 AOP,可以将遍布系统的关注点(例如事务和安全)从它们所应用的对象中解耦出来。

3.3 数据访问与集成

JDBC 和 data-access object 模块封装了样板式代码和异常。

集成了许多流行的 ORM。支持事务管理。

1)JDBC 和 DAO

JDBC 和 DAO(data-access object)模块封装了样板式代码和异常,保证了与数据库连接代码的整洁与简单,同时避免了由于未能关闭数据库资源引起的问题。

它在多种数据库服务器的错误信息之上提供了一个很重要的异常层。它还利用 Spring 的 AOP 模块为 Spring 应用程序中的对象提供事务管理服务。

2)ORM

Spring 通过提供对象/关系映射集成(ORM)模块在 JDBC 的基础上支持对象关系映射工具。

这样的支持使得 Spring 可以集成主流的 ORM 框架,包括 Hibernate, JDO, 及 iBATIS SQL Maps。Spring 的事务管理可以同时支持以上某种框架和 JDBC。

3.4 Web 与远程调用

Spring 的 web 模块建立在应用上下文(application context)模块之上,提供了一个适合基于 web 应用程序的上下文环境。该模块还支持了几个面向 web 的任务,如透明的处理多文件上传请求及将请求参数同业务对象绑定起来。

1)Spring MVC

Spring 可以很轻松的同其他 MVC 框架结合,但 Spring 的 MVC 是个更好的选择,因为它通过控制反转将控制逻辑和业务对象完全分离开来。通过 DispatcherServlet, ModelAndView 和 View Resolver,开发 web 应用变得很容易。

2)HTTP invoker

自带远程调用框架。提供了暴露和使用 REST API 的良好支持。还能集成多种流行远程调用框架。

3.5 Instrumentation

提供为 JVM 添加代理的功能。为 Tomcat 提供了一个织入代理,能够为 Tomcat 传递类文件,就像这些文件是被类加载器加载的一样。

3.6 测试

可以与常用的 JUNIT、Mockito、Spock 等测试框架整合使用。

为使用 JNDI、 Servlet 和 Portlet 编写单元测试提供了一系列的 mock 对象实现。加载 Spring 应用上下文中的 bean 集合以及与 Spring 上下文中的 bean 进行交互提供了支持。

4 Spring 社区经典项目

4.1 Spring Security

安全对于许多应用都是一个非常关键的切面。 利用 Spring AOP, 为 Spring 应用提供了声明式的安全机制。

4.2 Spring Data

使得在 Spring 中使用任何数据库都变得非常容易。 不管使用文档数据库, 还是关系型数据库,Spring Data 都为持久化提供了一种简单的编程模型。包括为多种数据库类型提供了一种自动化的 Repository 机制。

4.3 Spring Boot

Spring Boot 主要是为了解决使用 Spring 框架需要进行大量的配置太麻烦的问题,所以它并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具。

Spring Boot 大量依赖于自动配置(auto-configuration)技术,它能够消除大部分 Spring 配置。它还提供了多个 Starter 项目,降低了项目搭建的复杂度。同时它集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot 应用中这些第三方库几乎可以零配置的开箱即用。