文
章
目
录
章
目
录
Java面试题:说说Spring Bean的生命周期
标准回答
Spring Bean的生命周期可以分为四大部分,包括Bean定义、Bean初始化、Bean的生存期和Bean的销毁。以下是详细的步骤:
1. Bean定义
- Spring启动,查找并加载需要被Spring管理的Bean。
- 进行Bean的实例化,创建Bean对象。
2. Bean的初始化
- 对Bean进行属性的引入和值的注入,将属性值设置到Bean的属性中。
- 如果Bean实现了
BeanNameAware
接口,Spring将Bean的ID传递给setBeanName()
方法。 - 如果Bean实现了
BeanFactoryAware
接口,Spring将调用setBeanFactory()
方法,将BeanFactory容器实例传递给Bean。 - 如果Bean实现了
ApplicationContextAware
接口,Spring将调用Bean的setApplicationContext()
方法,将Bean所在应用上下文的引用传入。
3. Bean的生存期
- 如果Bean实现了
BeanPostProcessor
接口,Spring将调用它们的postProcessBeforeInitialization()
方法,在Bean初始化之前执行一些操作。 - 如果Bean实现了
InitializingBean
接口,Spring将调用它们的afterPropertiesSet()
方法,或者如果Bean使用了init-method
声明初始化方法,该方法也会被调用,用于执行Bean的初始化逻辑。
4. Bean的销毁
- Bean已经准备就绪,可以被应用程序使用。
- 如果Bean实现了
BeanPostProcessor
接口,Spring将调用它们的postProcessAfterInitialization()
方法,在Bean初始化之后执行一些操作。 - 当应用上下文被销毁时,如果Bean实现了
DisposableBean
接口,Spring将调用它们的destroy()
方法,或者如果Bean使用了destroy-method
声明销毁方法,该方法也会被调用,用于执行Bean的销毁逻辑。
加分回答
需要注意的是,这个生命周期过程由Spring容器自动管理,但我们可以干预其中的两个环节:
- 我们可以自定义初始化方法,并在该方法前增加
@PostConstruct
注解,这样Spring容器将在调用setBeanFactory()
方法之后调用该方法。 - 我们可以自定义销毁方法,并在该方法前增加
@PreDestroy
注解,这样Spring容器将在自身销毁之前调用这个方法。