深入Spring专题(23)

76 阅读2分钟

这是我参与2022首次更文挑战的第30天,活动详情查看2022首次更文挑战

管理Bean生命周期

任何IoC容器的一个重要部分是构建bean,使它们在生命周期中的某些点接收通知,能够在bean的整个生命周期中的某些点上完成相关处理,有两个生命周期事件与bean特别相关:post-initialization和pre-destruction。

在Spring的上下文中,一旦Spring完成bean的所有属性值设置以及所配置的依赖项检查,就会触发post-initialization事件,在Spring销毁bean实例之前,pre-destruction事件被触发,但是对于具有原型作用域的bean来说,Spring并不会触发pre-destruction事件,Spring的设计思想是,不管bean的作用域如何,初始化生命周期回调方法将在对象上被调用,而对于具有原型作用域的bean,销毁生命周期回调方法则不会被调用。bean可使用Spring提供的三种机制挂钩到每个事件中并执行一些额外的处理,分别是基于接口的、基于方法的和基于注解的机制。

这些机制实现了完全相同的目标,接口机制在Spring中被广泛使用,以便每次使用Spring的组件时都不必指定初始化或销毁。在bean中,使用基于方法或基于注解的机制可能会好些,因为bean不需要实现任何Spring特定的接口。

挂钩到bean的创建

如果一个bean有四个被声明为setter的依赖项,其中两个是必须的,还有一个bean在没有提供依赖项的情况下提供适合的默认值,通过使用初始化回调,bean可检查它所需的依赖项,触发异常或根据需要提供默认值。

一个bean不能在其构造函数中执行这些检查,因为Spring无法为所需的依赖项提供值。Spring的初始化回调函数在Spring完成提供依赖项之后调用,并执行要求的依赖项检查。