Spring 特性

核心特性

  • IOC 容器(Ioc Containers)

  • Spring 事件(Events)

    基于 Java 事件来进行扩展的,但是与 Java 的标准事件有一些区别

  • 资源管理(Resource)

    继承自 Java 的资源管理,部分 API 是借鉴了 Java 核心的底层 API 的一个实现

  • 国际化(i18n)

    Java 默认就支持国际化,Spring 的国际化也是 Java API 进行实践的

  • 校验(Validation)

    整合了 Bean Validation

  • 数据绑定(Data Binding)

    外面的属性和 Java 的 POJO 的 Setter、Getter 来进行一个数据上的转化和绑定

  • 类型转换(Type Conversion)

  • Spring 表达式(Spring Express Language)

  • 面向切面变成(AOP)

数据存储

  • JDBC

  • 事务抽象

  • DAO 支持

  • O/R 映射

  • XML 编列

Web 技术

Web Servlet 技术栈【Spring 1-4的唯一支持】

  • Spring MVC【底层需要 Servlet 引擎来进行支撑】

  • WebSocket【Servlet 3.0 以后对 WebSocket 进行了支持,有了相关规范】

  • SockJS

Web Reactive 技术栈【Spring 5引入】

  • Spring WebFlux【默认情况下是 Netty 的 Web Server,也可以使用 Spring MVC 的引擎来实现】

  • WebClient【Spring 5.0 之前,有 RestTemplate 或者 HttpClient,一个同步的 Http 的执行客户端,WebClient 的引入,它把过去的同步执行变成异步回调的方式】

  • WebSocket

技术整合(Integration)

  • 远程调用(Remoting)

    • RMI:Java 标准的远程方法调用

    • Hessian:社区开源的一个方案,比如 Dubbo,就是基于 Hessian 协议

  • Java 消息服务(JMS)

    • 远程调用是同步的,消息服务是异步的
  • Java 连接架构(JCA)

  • Java 管理扩展(JMX)

  • Java 邮件客户端(Email)

  • 本地任务(Tasks)

  • 本地调度(Scheduling)

  • 缓存抽象(Caching)

  • Spring 测试(Testing)

测试(Testing)

  • 模拟对象

  • TestContext 框架

  • Spring MVC 测试

  • Web 测试客户端

Spring 模块化设计

  • spring-aop

  • spring-aspects

  • spring-context-indexer

  • spring-context-support

  • spring-context

  • spring-core

  • spring-expression

  • spring-instrument(Java 的 agent 的一个支持)

  • spring-jcl(Spring 5 开始支持的,帮助 Spring 统一日志管理)

  • spring-jdbc

  • spring-jms

  • spring-messaging

  • spring-orm

  • spring-oxm(xml 的序列化和反序列化)

  • spring-test

  • spring-tx

  • spring-web

  • spring-webflux

  • spring-webmvc

  • spring-websocket

Spring 编程模型

  • 面向对象编程

    • 契约接口:Aware、BeanPostProcessor …

    • 设计模式:观察者模式、组合模式、模板模式 …

    • 对象继承:Abstract*类

  • 面向切面编程

    • 动态代理:JdkDynamicAopProxy

    • 字节码提升:ASM、CGLib、AspectJ …

  • 面向元编程

    • 注解:模式注解(@Component、@Service、@Repository …)

    • 配置:Environment 抽象、PropertySources、BeanDefination …

    • 泛型:GenericTypeResolver、ResolvableType …

  • 函数驱动

    • 函数接口:ApplicationEventPublisher

    • Reactive:Spring WebFlux

  • 模块驱动

    • Maven Artifacts

    • OSGI Bundles

    • Java 9 Automatic Modules

    • Spring @Enable*

Ioc 主要实现策略

  • 依赖查找

  • 依赖注入

IOC 容器的职责

  • 通用职责

  • 依赖处理

    • 依赖查找【主动的方式】

    • 依赖注入

  • 生命周期管理

    • 容器

    • 托管的资源(Java Beans 或其他资源)

  • 配置

    • 容器

    • 外部化配置

    • 托管的资源(Java Beans 或其他资源)

Ioc 容器的实现

  • Java SE

    • Java Beans

    • Java ServiceLoader SPI【Java 1.6 引入的】

    • JNDI

  • Java EE

    • EJB

    • Servlet

  • 开源

    • Apache Avalon

    • Google Guice

    • Spring Framework

传统 IOC 容器的实现

  • Java Beans 作为 IOC 容器

  • 特性

    • 依赖查找

    • 生命周期管理

    • 配置元信息【譬如:反射以及反射对应的应用】

    • 事件

    • 自定义

    • 资源管理

    • 持久化

  • 规范

    • JavaBeans

    • BeanContext

Spring 容器概述

  • Spring IOC 依赖查找

  • Spring IOC 依赖注入

  • Spring IOC 依赖来源

  • Spring IOC 配置元信息

  • Spring IOC 容器

  • Spring 应用上下文

  • 使用 Spring IOC 容器

  • Spring IOC 容器生命周期

  • 面试题精选

Spring IOC 依赖查找

  • 根据 Bean 名称查找

    • 实时查找

    • 延迟查找

  • 根据 Bean 类型查找

    • 单个 Bean 对象

    • 集合 Bean 对象

  • 根据 Bean 名称 + 类型查找

  • 根据 Java 注解查找

    • 单个 Bean 对象

    • 集合 Bean 对象

Spring IOC 依赖注入

  • 根据 Bean 名称注入

  • 根据 Bean 类型注入

    • 单个 Bean 对象

    • 集合 Bean 对象

  • 注入容器内建 Bean 对象

  • 注入非 Bean 对象

  • 注入类型

    • 实时注入

    • 延迟注入

Spring IOC 依赖来源

  • 自定义 Bean

  • 容器内建 Bean 对象【Envirenment】

  • 容器内建依赖【通过依赖注入的 Bean】

Spring IOC 配置元信息

  • Bean 定义配置

    • 基于 XML 文件

    • 基于 Properties 文件

    • 基于 Java 注解

    • 基于 Java API

  • IOC 容器配置

    • 基于 XML 文件

    • 基于 Java 注解

    • 基于 Java API

  • 外部化属性配置

    • 基于 Java 注解

Spring IOC 容器

BeanFactory 和 ApplicationContext 谁才是 Spring IOC 容器

Spring 应用上下文

ApplicationContext 除了 IOC 容器角色,还提供

  • 面向切面(AOP)

  • 配置元信息(Configuration Metadata)

  • 资源管理(Resources)

  • 事件(Events)

  • 国际化(i18n)

  • 注解(Annotations)

  • Environment 抽象(Environment Abstraction)

使用 Spring IOC 容器

  • BeanFactory 是 Spring 底层的 IOC 容器

  • ApplicationContext 是具备应用特性的 BeanFactory 的超集

Spring IOC 容器生命周期

  • 启动

  • 运行

  • 停止

Spring IOC 容器启动时做了那些准备

IOC 配置元信息读取和解析【XML 配置,注解等】、IOC 容器生命周期、Spring 事件发布、国际化等。