FantasticMao 技术笔记
BlogGitHub
  • README
  • C & Unix
    • C
      • 《C 程序设计语言》笔记
      • C 语言中的陷阱
      • CMake 示例
      • GNU make
      • LLVM Clang
      • Nginx 常用模块
      • Vim 常用命令
    • Unix-like
      • 《深入理解计算机系统》笔记
      • 《UNIX 环境高级编程》笔记 - UNIX 基础知识
      • 《UNIX 环境高级编程》笔记 - 文件 IO
      • 《UNIX 环境高级编程》笔记 - 标准 IO 库
      • 《鳥哥的 Linux 私房菜》笔记 - 目录配置
      • 《鳥哥的 Linux 私房菜》笔记 - 认识与学习 bash
      • 《鳥哥的 Linux 私房菜》笔记 - 任务管理
      • OpenWrt 中的陷阱
      • iptables 工作机制
  • Go
    • 《A Tour of Go》笔记
    • Go vs C vsJava
    • Go 常用命令
    • Go 语言中的陷阱
  • Java
    • JDK
      • 《Java 并发编程实战》笔记 - 线程池的使用
      • 设计模式概览
      • 集合概览
      • HashMap 内部算法
      • ThreadLocal 工作机制
      • Java Agent
    • JVM
      • 《深入理解 Java 虚拟机》笔记 - Java 内存模型与线程
      • JVM 运行时数据区
      • 类加载机制
      • 垃圾回收算法
      • 引用类型
      • 垃圾收集算法
      • 垃圾收集器
    • Spring
      • Spring IoC 容器扩展点
      • Spring Transaction 声明式事务管理
      • Spring Web MVC DispatcherServlet 工作机制
      • Spring Security Servlet 实现原理
    • 其它
      • 《Netty - One Framework to rule them all》演讲笔记
      • Hystrix 设计与实现
  • JavaScript
    • 《写给大家看的设计书》笔记 - 设计原则
    • 《JavaScript 权威指南》笔记 - jQuery 类库
  • 数据库
    • ElasticSearch
      • ElasticSearch 概览
    • HBase
      • HBase 数据模型
    • Prometheus
      • Prometheus 概览
      • Prometheus 数据模型和指标类型
      • Prometheus 查询语法
      • Prometheus 存储原理
      • Prometheus vs InfluxDB
    • Redis
      • 《Redis 设计与实现》笔记 - 简单动态字符串
      • 《Redis 设计与实现》笔记 - 链表
      • 《Redis 设计与实现》笔记 - 字典
      • 《Redis 设计与实现》笔记 - 跳跃表
      • 《Redis 设计与实现》笔记 - 整数集合
      • 《Redis 设计与实现》笔记 - 压缩列表
      • 《Redis 设计与实现》笔记 - 对象
      • Redis 内存回收策略
      • Redis 实现分布式锁
      • Redis 持久化机制
      • Redis 数据分片方案
      • 使用缓存的常见问题
    • MySQL
      • 《高性能 MySQL》笔记 - Schema 与数据类型优化
      • 《高性能 MySQL》笔记 - 创建高性能的索引
      • 《MySQL Reference Manual》笔记 - InnoDB 和 ACID 模型
      • 《MySQL Reference Manual》笔记 - InnoDB 多版本
      • 《MySQL Reference Manual》笔记 - InnoDB 锁
      • 《MySQL Reference Manual》笔记 - InnoDB 事务模型
      • B-Tree 简述
      • 理解查询执行计划
  • 中间件
    • gRPC
      • gRPC 负载均衡
    • ZooKeeper
      • ZooKeeper 数据模型
    • 消息队列
      • 消息积压解决策略
      • RocketMQ 架构设计
      • RocketMQ 功能特性
      • RocketMQ 消息存储
  • 分布式系统
    • 《凤凰架构》笔记
    • 系统设计思路
    • 系统优化思路
    • 分布式事务协议:二阶段提交和三阶段提交
    • 分布式系统的技术栈
    • 分布式系统的弹性设计
    • 单点登录解决方案
    • 容错,高可用和灾备
  • 数据结构和算法
    • 一致性哈希
    • 布隆过滤器
    • 散列表
  • 网络协议
    • 诊断工具
    • TCP 协议
      • TCP 报文结构
      • TCP 连接管理
由 GitBook 提供支持
在本页
  • BeanPostProcessor
  • 案例一
  • 案例二
  • BeanFactoryPostProcessor
  • 案例一
  • 案例二
  • FactoryBean
  • 案例一
  • 参考资料
  1. Java
  2. Spring

Spring IoC 容器扩展点

在 Spring 中,可以通过实现特定的 IoC 容器扩展接口来实现更高级的功能。

BeanPostProcessor

使用 BeanPostProcessor 接口可以在 IoC 容器中自定义 Bean 实例。BeanPostProcessor 接口定义了创建 Bean 实例 之前 和 之后 的钩子方法,开发者可以通过这两个钩子方法来实现自定义 Bean 的实例化逻辑(甚至可以覆盖 IoC 容器中创建的实例)、依赖解析逻辑等等。

案例一

Spring 内置提供的 EnvironmentAware、ResourceLoaderAware 和 ApplicationContextAware 等接口可以为 Bean 提供感知 IoC 容器的能力,这些接口都是通过 ApplicationContextAwareProcessor 处理器来实现的。

案例二

Spring 对 JSR-250 中定义的 @Resource、@PostConstruct 和 @PreDestroy 等注解的支持是通过 CommonAnnotationBeanPostProcessor 处理器来实现的。

BeanFactoryPostProcessor

使用 BeanFactoryPostProcessor 接口可以在 IoC 容器中自定义 Bean 的配置元数据。在 IoC 容器实例化任何 Bean(除了 BeanFactoryPostProcessor 本身)之前,BeanFactoryPostProcessor 接口可以读取 Bean 的配置元数据,并且可以修改它。

案例一

Spring 内置提供的 PropertySourcesPlaceholderConfigurer 支持从外部的 .properties 文件中读取 Bean 的配置元数据的属性值。

案例二

在基于 Annotation 的配置模式下,Spring 会通过 ConfigurationClassPostProcessor 处理器来解析 @Configuration 注解标记的配置类。

FactoryBean

使用 FactoryBean 接口可以在 IoC 容器中直接创建 Bean 实例。Spring 支持使用 FactoryBean#getObject() 来直接创建对象,在 IoC 容器内部会对 FactoryBean 创建的实例名称前面加上 & 前缀。

案例一

Spring 内置提供的 ThreadPoolExecutorFactoryBean 支持创建一个线程池 Bean 实例。

参考资料

最后更新于1年前

The IoC Container - Container Extension Points