菜单

主要功能

相关源文件

本文档重点介绍了 Spring Framework 作为全面的应用程序开发平台的主要特性和功能。这些特性为构建企业 Java 应用程序奠定了基础,最大限度地减少了样板代码并提供了最大的灵活性。

控制反转 (IoC) 容器

Spring Framework 最显著的特性是其精密的 IoC 容器,它管理着对象的生命周期和依赖关系。该容器围绕 BeanFactory 接口构建,其中 DefaultListableBeanFactory 是其主要实现。

核心 IoC 容器架构

DefaultListableBeanFactory 作为核心 Bean 注册表,实现了 ConfigurableListableBeanFactoryBeanDefinitionRegistry 接口。它在一个 ConcurrentHashMap<String, BeanDefinition> beanDefinitionMap 中维护 Bean,并通过 getBeanNamesForType()getBeansOfType() 等方法提供类型安全的 Bean 检索。

容器特性实现关键方法
Bean 注册BeanDefinitionRegistryregisterBeanDefinition(), removeBeanDefinition()
Bean 检索ListableBeanFactorygetBean(), getBeanNamesForType(), getBeansOfType()
类型匹配DefaultListableBeanFactoryisTypeMatch(), getType()
依赖项解析AutowireCapableBeanFactoryresolveDependency(), autowireBean()

来源

依赖注入

Spring 的依赖注入系统使用 AutowiredAnnotationBeanPostProcessor 及相关基础设施自动解析和注入依赖。

依赖注入机制

AutowiredAnnotationBeanPostProcessor 通过实现 SmartInstantiationAwareBeanPostProcessor 接口来处理 @Autowired@Value@Inject 注解。它在 postProcessMergedBeanDefinition() 阶段处理注入元数据,并在 postProcessProperties() 中执行实际注入。

注入类型处理器方法支持的注解
构造函数determineCandidateConstructors()构造函数上的 @Autowired
字段postProcessProperties()@Autowired, @Value, @Inject
方法postProcessProperties()@Autowired, @Value, @Inject

来源

Web 技术

Spring 提供了同步和响应式 HTTP 客户端,代表了不同的 Web 通信编程模型。

HTTP 客户端基础设施

Web 客户端架构

RestTemplate(同步)

RestTemplate 继承 InterceptingHttpAccessor 并实现 RestOperations,提供了一个采用模板方法模式的同步 HTTP 客户端。它维护一个 List<HttpMessageConverter<?>> messageConverters 用于请求/响应转换,并通过 ClientHttpRequestInterceptor 支持拦截器。

RestTemplate 方法目的返回类型
getForObject()返回对象的 GET 请求<T> T
getForEntity()返回 ResponseEntity 的 GET 请求<T> ResponseEntity<T>
postForObject()返回对象的 POST 请求<T> T
exchange()通用 HTTP 交换<T> ResponseEntity<T>
execute()低级 HTTP 执行<T> T

WebClient(响应式)

WebClient 通过 DefaultWebClient 实现提供响应式 HTTP 客户端。它使用流畅的 API,通过 RequestHeadersUriSpecRequestBodyUriSpec 接口进行方法链式调用,返回用于响应式流的 MonoFlux 类型。

WebClient 方法目的返回类型
get(), post(), put()HTTP 方法规范RequestHeadersUriSpec<?>RequestBodyUriSpec
retrieve()简单响应提取ResponseSpec
exchangeToMono()高级响应处理<V> Mono<V>
bodyToMono()提取单个响应对象<T> Mono<T>
bodyToFlux()提取响应流<T> Flux<T>

来源

MVC 配置支持

Spring 通过 WebMvcConfigurationSupport 提供声明式 MVC 配置,该类为核心 MVC 组件定义了 @Bean 方法。应用程序可以扩展此 K 类或实现 WebMvcConfigurer 进行自定义。

配置组件Bean 方法目的
处理器映射requestMappingHandlerMapping()@RequestMapping 映射到处理器
处理器适配器requestMappingHandlerAdapter()执行控制器方法
消息转换器getMessageConverters()HTTP 消息转换
异常解析器handlerExceptionResolver()异常处理
视图解析器mvcViewResolver()视图解析

来源

响应式编程

Spring 的响应式编程支持围绕 WebClient 和响应式 HTTP 基础设施展开,提供带背压支持的非阻塞 I/O。

响应式 HTTP 客户端

WebClient 响应式架构

WebClient 操作返回响应式类型(Mono<T>, Flux<T>),实现非阻塞组合。DefaultWebClient 实现使用 ExchangeFunction 进行请求/响应交换,并使用 ExchangeStrategies 进行消息编解码器配置。

WebClient 组件实现关键方法
生成器DefaultWebClientBuilderbuild(), baseUrl(), clientConnector()
请求规范DefaultRequestBodyUriSpecuri(), headers(), bodyValue()
响应规范DefaultResponseSpecbodyToMono(), toEntity(), onStatus()
交换ExchangeFunctionexchange()
响应DefaultClientResponsestatusCode(), bodyToMono(), bodyToFlux()

WebFlux 配置

WebFluxConfigurationSupport 为响应式 Web 应用程序提供声明式配置,与 Spring MVC 类似,但针对响应式流进行了优化。

配置 Bean方法目的
处理器映射routerFunctionMapping()函数式路由
处理器适配器handlerAdapter()响应式处理器执行
结果处理器responseEntityResultHandler()响应处理
异常处理器responseStatusExceptionHandler()响应式异常处理

来源

注解驱动开发

Spring 的注解支持通过专门的 BeanPostProcessor 实现来处理 Bean 生命周期中的注解,从而实现声明式编程。

注解处理基础设施

注解处理流程

AutowiredAnnotationBeanPostProcessor 默认维护一个包含 @Autowired@Value@InjectSet<Class<? extends Annotation>> autowiredAnnotationTypes。它实现了关键的生命周期方法

生命周期方法目的注解支持
determineCandidateConstructors()构造函数注入构造函数上的 @Autowired
postProcessMergedBeanDefinition()缓存注入元数据所有支持的注解
postProcessProperties()执行字段/方法注入@Autowired, @Value, @Inject

Bean 工具支持

Spring 提供了 BeanUtils 用于反射式 Bean 操作,包括支持带可选参数和默认值的构造函数注入,尤其适用于 Kotlin 类。

BeanUtils 方法目的Kotlin 支持
instantiateClass()Bean 实例化带默认值的主构造函数
findPrimaryConstructor()构造函数解析Kotlin 主构造函数
copyProperties()属性复制Bean 属性映射

来源

高级特性

Spring Framework 包含许多用于企业应用程序开发的高级特性。

类型转换和数据绑定

Spring 提供了一个精密的类型转换系统,用于在不同数据类型之间进行转换

  • TypeConverter - 类型转换的核心接口
  • ConversionService - 类型转换器的注册表
  • PropertyEditors - 传统的 Java Bean 属性编辑器
  • FormattingConversionService - 用于格式化/解析特定于语言环境的值

来源

国际化 (i18n)

Spring 提供全面的国际化支持

  • MessageSource - 用于从资源包中解析消息
  • LocaleResolver - 用于解析当前语言环境
  • LocaleContextHolder - 用于在整个应用程序中访问语言环境信息

来源

资源管理

Spring 提供资源访问抽象

  • Resource 接口 - 统一访问各种资源类型
  • ResourceLoader - 资源加载策略
  • ResourcePatternResolver - 用于解析资源模式

来源

总结

Spring Framework 为企业 Java 应用程序开发提供了一套全面的特性

  1. 核心容器 - 精密的 IoC 容器,具有强大的依赖注入功能
  2. Web 支持 - 传统的 MVC 和现代的响应式 Web 编程模型
  3. 数据访问 - 简化的数据访问与事务管理
  4. 集成 - 用于与其他企业系统集成的工具
  5. 测试 - 全面的测试支持

该框架的模块化架构允许开发人员只使用他们需要的部分,而其基于注解的配置减少了样板代码并提高了开发人员的生产力。