Material Combiner Add-on深度解析:Blender材质纹理优化架构揭秘
2026/6/4 20:12:16
“请你讲一下 Spring Bean 的生命周期。”
当面试官抛出这个问题时,他考的不是你的背诵能力,而是你对Spring 扩展点的理解。
@Autowired是什么时候注入的?如果你只能回答init和destroy,那只能拿 30 分。
今天,我们把 Spring 源码扒光,总结出标准的 12 个关键步骤。记住这张图,面试时直接在白板上画出来,稳拿 Offer!
Spring Bean 的生命周期本质上就是:创建 -> 属性赋值 -> 初始化 -> 使用 -> 销毁。
但在“初始化”阶段,Spring 埋下了大量的钩子 (Hooks)。
核心流程 Mermaid 图解:
我们将这 12 步分为四个阶段,方便记忆。
1. Instantiation (实例化)
Constructor)或者工厂方法。2. Populate Properties (属性赋值)
@Autowired、@Value等注解,或者 XML 中的<property>。Bean 开始“认识”自己所处的环境。
3. BeanNameAware
6. BeanPostProcessor - Before (前置处理)
postProcessBeforeInitialization7. @PostConstruct
8. InitializingBean
afterPropertiesSet()方法。9. init-method
<bean init-method="...">或@Bean(initMethod = "...")。10. BeanPostProcessor - After (后置处理)
postProcessAfterInitialization11. DisposableBean
destroy()接口。12. destroy-method
我们将所有接口都实现,看看控制台打印的顺序是否一致。
@ComponentpublicclassLifeCycleBeanimplementsBeanNameAware,BeanFactoryAware,InitializingBean,DisposableBean{publicLifeCycleBean(){System.out.println("1. 构造函数 (Instantiation)");}@AutowiredpublicvoidsetService(SomeServiceservice){System.out.println("2. 属性赋值 (Populate Properties)");}@OverridepublicvoidsetBeanName(Stringname){System.out.println("3. BeanNameAware");}@OverridepublicvoidsetBeanFactory(BeanFactorybeanFactory){System.out.println("4. BeanFactoryAware");}@PostConstructpublicvoidpostConstruct(){System.out.println("7. @PostConstruct");}@OverridepublicvoidafterPropertiesSet(){System.out.println("8. InitializingBean");}publicvoidinitMethod(){System.out.println("9. init-method");}@Overridepublicvoiddestroy(){System.out.println("11. DisposableBean");}publicvoiddestroyMethod(){System.out.println("12. destroy-method");}}控制台输出结果:
(注:步骤 5, 6, 10 需要实现额外的 Processor 才会显示)
1. 构造函数 (Instantiation) 2. 属性赋值 (Populate Properties) 3. BeanNameAware 4. BeanFactoryAware (ApplicationContextAware...) (BeanPostProcessor - Before...) 7. @PostConstruct 8. InitializingBean 9. init-method (BeanPostProcessor - After...) ... 容器关闭 ... 11. DisposableBean 12. destroy-method为了防止背了忘,请记住这个**“四字真言”**流程:
建 -> 填 -> 觉 -> 初 -> 销
最关键的点:记住BeanPostProcessor像两个括号一样,包裹了所有的“初始化方法”。