Spring - Bean生命周期
在Spring框架中,Bean的生命周期是指从Bean的实例化开始直到销毁的过程。下面是一个典型的Spring Bean的生命周期:
-
实例化:
- Spring容器根据配置信息(如XML配置文件或注解)创建Bean的实例。
- 如果Bean是通过构造器注入,那么会调用相应的构造器来创建实例;如果是无参构造器,则直接调用默认构造器。
-
属性填充:
- Spring根据配置信息将其他Bean注入到当前Bean的属性中。
- 对于
@Autowired
注解的字段,Spring会查找并注入匹配的Bean。
-
Aware接口回调:
- 如果Bean实现了
BeanNameAware
,则调用setBeanName(String name)
方法。 - 如果Bean实现了
BeanFactoryAware
,则调用setBeanFactory(BeanFactory factory)
方法。 - 如果Bean实现了
ApplicationContextAware
,则调用setApplicationContext(ApplicationContext context)
方法。
- 如果Bean实现了
-
后置处理器回调:
- 如果有
BeanPostProcessor
实现类注册在容器中,它们的postProcessBeforeInitialization(Object bean, String beanName)
方法会被调用。
- 如果有
-
初始化方法调用:
-
如果Bean定义了
init-method
属性,那么对应的初始化方法会被调用。@Component public class A { @PostConstruct //等价与init-method public void init() { System.out.println("初始化--->@PostConstruct"); } }
-
如果Bean实现了
InitializingBean
接口,那么afterPropertiesSet()
方法会被调用。@Component public class A implements InitializingBean { @Override public void afterPropertiesSet() throws Exception { System.out.println("初始化--->InitializingBean"); } }
-
-
后置处理器再次回调:
- 如果有
BeanPostProcessor
实现类注册在容器中,它们的postProcessAfterInitialization(Object bean, String beanName)
方法会被调用。
- 如果有
-
Bean可用:
- Bean现在可以被其他Bean使用,或者处理请求。
-
销毁:
-
当Spring容器关闭时,如果Bean定义了
destroy-method
属性,那么对应的销毁方法会被调用。@Component public class A { @PreDestroy public void destroy() { System.out.println("销毁--->@PreDestroy"); } }
-
如果Bean实现了
DisposableBean
接口,那么destroy()
方法会被调用。@Component public class A implements DisposableBean { @Override public void destroy() throws Exception { System.out.println("销毁--->DisposableBean"); } }
-