目录
欢迎关注微信公众号:数据科学与艺术 作者WX:superhe199
Spring 对象的生命周期管理
一、简介
Spring框架提供了一种强大的对象生命周期管理机制,通过其核心组件——IoC(控制反转)容器,来管理对象的创建、配置和使用。Spring容器不仅能够自动管理对象之间的依赖关系,还能在适当的时机调用对象的生命周期方法,从而简化了对象的管理和维护。
二、Spring 框架对对象的生命周期管理包括创建、初始化和销毁三个主要阶段。
创建阶段
Spring 容器在启动时或者当请求一个 bean 时,会根据配置创建对象。如果 bean 的作用域设置为 singleton
,则 Spring 容器在启动时就会创建该 bean 的单一实例。如果作用域设置为 prototype
,则每次请求时都会创建一个新的实例。此外,还可以通过配置文件或注解来控制对象的创建时机。
初始化阶段
在对象创建之后,Spring 会进行初始化处理。初始化阶段可以通过多种方式触发:
-
实现
InitializingBean
接口并重写afterPropertiesSet()
方法:这是一个通用的初始化方法,当 Spring 容器完成属性注入后会调用此方法。 -
配置
init-method
属性:在<bean>
标签中使用init-method
属性指定一个初始化方法名,Spring 容器在创建对象后会调用该方法。 -
使用
@PostConstruct
注解:在方法上方添加@PostConstruct
注解,Spring 容器在完成依赖注入后进行调用。
销毁阶段
当 Spring 容器关闭时,它会销毁所有的 singleton beans。在销毁之前,Spring 会调用对象的销毁方法。销毁阶段可以通过以下方式触发:
-
实现
DisposableBean
接口并重写destroy()
方法:这是一个通用的销毁方法,当 Spring 容器关闭时会调用此方法。 -
配置
destroy-method
属性:在<bean>
标签中使用destroy-method
属性指定一个销毁方法名,Spring 容器在销毁对象前会调用该方法。 -
使用
@PreDestroy
注解:在方法上方添加@PreDestroy
注解,Spring 容器在销毁对象前进行调用。
三、 具体对象的生命周期
Spring中对象的生命周期可以概括为以下几个阶段:
实例化(Instantiation)
当Spring容器接收到创建Bean的请求时,它会根据配置文件或注解的信息,使用Java反射机制实例化Bean。容器使用构造函数或工厂方法创建对象实例。
属性设置(Property population)
实例化后,Spring容器会根据配置文件或注解中的信息,为Bean的属性赋值,这一过程被称为依赖注入(DI)。容器将配置文件中定义的属性值或引用注入到对象中。
初始化(Initialization)
接着,Spring容器会调用Bean的初始化方法,如实现了InitializingBean
接口的afterPropertiesSet()
方法,或者是配置文件中定义的init-method
。容器调用对象的初始化方法,可以通过实现 InitializingBean 接口或在配置文件中通过 init-method 属性指定初始化方法。
使用(In use)
初始化完成后,Bean就可以被应用程序使用了。在Spring中,你可以通过依赖注入的方式将Bean放入其他组件中。对象可以被容器或其他对象使用
销毁(Destruction)
当Spring容器被关闭时,或者在配置文件中指定了销毁方法的情况下,Spring容器会调用Bean的销毁方法,如实现了DisposableBean
接口的destroy()
方法,或者是配置文件中定义的destroy-method
。可以通过实现 DisposableBean 接口或在配置文件中通过 destroy-method 属性指定销毁方法。
使用new
关键字创建对象
虽然Spring容器提供了对象的生命周期管理,但在特定场景下,我们仍可能需要手动使用new
关键字来创建对象。这时,Spring框架能够通过AOP(面向切面编程)和其他机制来集成这些手动创建的对象,使其也能享受到Spring容器提供的其他服务,如事务管理、依赖注入等。