简单介绍Spring的生命周期

Spring的生命周期主要包括以下阶段:

  1. 创建前准备阶段:在这个阶段,Spring从上下文和相关配置中解析并查找与Bean相关的配置内容,如init-method(容器在初始化Bean时调用的方法)和destroy-method(容器在销毁Bean时调用的方法)。此外,还包括BeanFactoryPostProcessor等Bean加载过程中的前置和后置处理。
  2. 创建实例阶段:在这个阶段,Spring通过反射创建Bean的实例对象,并扫描和解析Bean声明的属性。
  3. 依赖注入阶段:在此阶段,Spring检测被实例化的Bean是否存在其他依赖,并对这些依赖进行注入。这通常涉及读取如@Autowired、@Setter等依赖注入的配置。
  4. 初始化阶段:当Bean的依赖注入完成后,Spring会调用Bean的初始化方法,例如调用Bean的setter方法设置属性值,或者执行@PostConstruct注解的方法。
  5. 容器缓存阶段:在此阶段,Bean被保存到IoC容器中,以便开发者可以访问和使用它。此时,init-method配置的方法会被调用。
  6. 销毁实例阶段:当Spring容器关闭或Bean不再被使用时,Bean的销毁方法会被调用,释放资源并执行清理操作。如果Bean实现了DisposableBean接口或配置了destroy-method属性,它们在这个阶段会被调用。

或者Spring的生命周期主要包括以下几个阶段:

  1. 实例化(Instantiation):Spring IoC容器根据配置文件或注解信息创建Bean的实例。

  2. 属性赋值(Dependency Injection):Spring IoC容器为Bean的属性设置值,这通常包括依赖注入(DI),即将其他Bean注入到当前Bean中。

  3. 初始化(Initialization):在Bean的属性设置完成后,Spring IoC容器会调用Bean的初始化方法,这通常包括实现了InitializingBean接口的afterPropertiesSet方法,或者通过配置文件中指定的init-method方法。

  4. 使用(Using):Bean现在可以被应用程序使用了。

  5. 销毁(Destruction):当Bean不再需要时,Spring IoC容器会调用Bean的销毁方法,这通常包括实现了DisposableBean接口的destroy方法,或者通过配置文件中指定的destroy-method方法。

下面是一个简单的代码示例,展示了Spring生命周期的各个阶段:

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@Bean
public MyBean myBean() {
return new MyBean();
}
public static class MyBean implements InitializingBean, DisposableBean {
// 实例化阶段 - MyBean的构造函数会被调用
public MyBean() {
System.out.println("MyBean - Instantiation");
}
// 属性赋值阶段 - 通过setter方法或依赖注入设置属性值
public void setSomeProperty(String property) {
System.out.println("MyBean - Property Injection: " + property);
}
// 初始化阶段 - 实现InitializingBean接口的afterPropertiesSet方法
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("MyBean - Initialization");
}
// 使用阶段 - 可以通过ApplicationContext手动获取Bean并使用它
public void doSomething() {
System.out.println("MyBean - Using the bean");
}
// 销毁阶段 - 实现DisposableBean接口的destroy方法
@Override
public void destroy() throws Exception {
System.out.println("MyBean - Destruction");
}
}
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
// 获取并使用Bean
MyBean myBean = context.getBean(MyBean.class);
myBean.doSomething();
// 关闭ApplicationContext,触发Bean的销毁阶段
((AnnotationConfigApplicationContext) context).close();
}
}

在这个示例中,MyBean类展示了Spring生命周期的各个阶段。当应用程序启动时,MyBean的实例会被创建,然后设置属性值,接着调用afterPropertiesSet方法进行初始化。然后,可以通过ApplicationContext获取并使用这个Bean。最后,当ApplicationContext关闭时,destroy方法会被调用,完成Bean的销毁。

请注意,在实际应用程序中,你可能不会直接在Bean类中实现InitializingBeanDisposableBean接口,而是使用@PostConstruct@PreDestroy注解来分别标注初始化方法和销毁方法。此外,init-methoddestroy-method也可以通过XML配置来指定。

  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wddblog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值