Spring中的bean 生命周期

345 阅读2分钟

这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战

Spring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。Bean是Spring最基本的要素,所以准确的了解Spring Bean的生命周期是非常必要的。

Spring Bean的完整生命周期从创建Spring容器开始,直到最终Spring容器销毁Bean.

Spring Bean的创建

首先,程序向Spring Bean容器申请一个Bean。申请的方式,可以通过Bean的name(定义Bean时设置的name属性), 可以通过Bean的类名。Spring Bean容器找到配置文件中 Spring Bean 的所有定义,包括依赖和属性注入,Bean的工厂类等。

实例生成

得到Bean的类名,如果有构造方法的注入,使用带参数的构造方法,生成实例,否则,使用无参数的构造方法,生成实例。如果已经定义了Bean的生成方法,调用生成方法生成实例。

如果是单例模式,保存生成的实例,下次请求时,如果保存的实例还存在,则使用保存的实例。

注入操作

如果Bean设置了依赖的Bean,寻找依赖Bean的实例注入。如果Bean了属性的注入,将设置里的属性值注入。如果Bean实现了 xxxAware接口,则调用Bean里面的setXxx方法

Spring Bean的初始化

如果有和加载这个Bean 的 Spring 容器相关的 BeanPostProcessor对象﹐执行postProcessBeforeInitialization()方法。

如果Bean实现了InitializingBean接口,执行afterPropertiesSet()方法。

如果 Bean在配置文件中的定义包含init-method属性,执行指定的方法。

如果有和加载这个Bean的 Spring 容器相关的 BeanPostProcessor对象﹐执行postProcessAfterInitialization()方法

Spring Bean的销毁

在Spring Bean从Spring容器中被移除前,Spring Bean还会做一系列的操作:

当要销毁Bean 的时候,如果Bean 实现了DisposableBean 接口,执行destroy()方法。

当要销毁Bean的时候,如果 Bean在配置文件中的定义包含destroy-method属性,执行指定的方法。

总结:

一个Spring Bean从创建到销毁,会经历通过Spring容器执行很多步骤,这些步骤都可以自定义执行,这些步骤可以是检查、初始化或清理的操作。