BeanPostProcesspost.ProcessBeforeInitialization() 和BeanPostProcessor.postProcessBeforeInitializatio 📅 2026/6/23 12:11:23 Spring Bean 的完整生命周期为了理解这两个方法的区别先看完整的 Bean 生命周期┌─────────────────────────────────────────────────────────┐│ Spring Bean 生命周期 │├─────────────────────────────────────────────────────────┤│ ││ 1. 实例化前 (Instantiation Before) ││ ↓ postProcessBeforeInstantiation() ││ ││ 2. 实例化 (Instantiation) ││ - 调用构造器创建对象 ││ ↓ ││ ││ 3. 实例化后 (Instantiation After) ││ ↓ postProcessAfterInstantiation() ││ ││ 4. 属性填充 (Populate Bean) ││ - Autowired 注入依赖 ││ ↓ ││ ││ 5. 初始化前 (Initialization Before) ││ ↓ postProcessBeforeInitialization() ││ ││ 6. 初始化 (Initialization) ││ - PostConstruct ││ - InitializingBean.afterPropertiesSet() ││ - init-method ││ ↓ ││ ││ 7. 初始化后 (Initialization After) ││ ↓ postProcessAfterInitialization() ││ ││ 8. Bean 就绪可以使用 ││ ↓ ││ ││ 9. 销毁前 ││ - PreDestroy ││ - DisposableBean.destroy() ││ - destroy-method ││ │└─────────────────────────────────────────────────────────┘三、两个关键方法详解 方法 1postProcessBeforeInstantiation()所属接口InstantiationAwareBeanPostProcessor继承自 BeanPostProcessor执行时机在 Bean 实例化之前调用构造器之前方法签名Nullabledefault Object postProcessBeforeInstantiation(Class? beanClass, String beanName)throws BeansException {return null;}返回值返回 null继续正常的 Bean 创建流程返回非 null跳过正常的实例化和初始化直接使用该对象典型应用场景AOP 代理对象的提前创建自定义 Bean 创建逻辑使用自定义逻辑替代 Spring 的默认实例化方法 2postProcessBeforeInitialization()所属接口BeanPostProcessor执行时机在 Bean 实例化之后、初始化之前属性已填充但 PostConstruct 等还未执行方法签名Nullabledefault Object postProcessBeforeInitialization(Object bean, String beanName)throws BeansException {return bean;}返回值返回原始 bean 或包装后的 bean不能返回 null否则会抛出异常典型应用场景在 PostConstruct 之前做一些预处理检查 Bean 的状态动态修改 Bean 的属性