SpringBean生命周期
Spring Bean的生命周期可以概括为以下几个阶段:
- 实例化(Instantiation):Spring容器通过反射创建bean的实例。
- 属性赋值(Populate properties):Spring设置bean的属性,如依赖注入。
- 初始化(Initialization):如果bean实现了BeanNameAware, BeanFactoryAware, ApplicationContextAware等接口,相应的方法会被调用。然后,如果bean实现了InitializingBean接口,其afterPropertiesSet方法会被调用。最后,如果在<bean>定义中通过
init-method
属性指定了初始化方法,该方法也会被调用。 - 使用(Using the bean):这是bean可以被应用程序使用的阶段,bean处于容器的管理之中,可以被应用程序调用。
- 销毁(Destruction):如果bean实现了DisposableBean接口,其destroy方法会被调用。同样,如果在<bean>定义中通过
destroy-method
属性指定了销毁方法,该方法也会被调用。
以下是一个简单的Spring Bean的定义和使用示例:
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean(initMethod = "customInit", destroyMethod = "customDestroy")
public MyBean myBean() {
return new MyBean();
}
public static void main(String[] args) {
// 创建并使用Spring上下文
try (AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class)) {
MyBean bean = context.getBean(MyBean.class);
// 使用bean...
}
}
public static class MyBean implements InitializingBean, DisposableBean {
public MyBean() {
// 实例化阶段
System.out.println("实例化MyBean");
}
@Override
public void afterPropertiesSet() throws Exception {
// 初始化阶段
System.out.println("调用afterPropertiesSet");
}
public void customInit() {
// 自定义初始化方法
System.out.println("调用customInit");
}
public void customDestroy() {
// 自定义销毁方法
System.out.println("调用customDestroy");
}
@Override
public void destroy() throws Exception {
// 销毁阶段
System.out.println("调用destroy");
}
}
}
在这个例子中,myBean
方法创建了一个MyBean
的实例,并通过@Bean
注解指定了自定义的初始化和销毁方法。当Spring上下文被创建和关闭时,MyBean
的实例会经历完整的生命周期。
评论已关闭