SpringBoot后置处理器,扫描动态线程池,注册动态线程池
一.自定义注解 DynamicThreadPool
用来说明这个bean是动态线程池
二.Spring扩展点前置知识
1、Spring Bean 生命周期扩展点
接口 / 注解 | 作用 | 常见使用场景 |
---|---|---|
BeanPostProcessor |
Bean 初始化前后做处理(代理/增强/注册) | AOP、自动代理、线程池注册、自定义注解处理 |
InstantiationAwareBeanPostProcessor |
Bean 实例化前后处理字段注入等(高级版本) | 属性值提前干预、自动装配逻辑定制 |
SmartInstantiationAwareBeanPostProcessor |
提供构造函数预测、早期代理创建 | Spring AOP 与 Cglib 动态代理核心 |
DestructionAwareBeanPostProcessor |
Bean 销毁前做处理 | 清理资源、记录销毁日志 |
@PostConstruct / InitializingBean |
初始化完成回调 | 初始化逻辑执行,如连接池初始化 |
@PreDestroy / DisposableBean |
Bean 销毁前回调 | 清理资源,如线程池关闭、MQ连接断开 |
2、Spring 容器感知接口(Aware 系列)
让 Bean 获得 Spring 容器内部资源的引用(如 ApplicationContext、BeanName 等)
接口名 | 注入内容 | 典型用途 |
---|---|---|
ApplicationContextAware |
注入 ApplicationContext | 获取其他 Bean、获取注解、事件发布等 |
BeanNameAware |
注入 Bean 名称 | 日志标记、注册唯一ID等 |
EnvironmentAware |
注入 Spring 环境配置 | 动态获取配置项(如环境变量) |
ResourceLoaderAware |
注入资源加载器 | 加载 classpath、文件资源等 |
ServletContextAware |
注入 Web 容器上下文(仅 Web) | 获取 ServletContext、路径 |
三.后置处理器,注册
1.ApplicationContextAware
注入 ApplicationContext
把ApplicationContext
赋值到一个静态变量上,这样就能在非Spring环境中拿到Spring的bean
2.OneThreadBeanPostProcessor
后置处理器,扫描bean,如果是动态线程池,则注册到OneThreadRegistry
中(内部维护的一个threaId
-ThreadPoolExecutorHolder
的静态map)