定义
程序中的每个对象都有生命周期,对象的创建、初始化、应用、销毁的整个过程称之为对象的生命周期;
在对象创建以后需要初始化,应用完成以后需要销毁时执行的一些方法,可以称之为是生命周期方法;
在spring中,可以通过 @PostConstructt
和 @PreDestroy注解实现 bean对象 生命周期的初始化和销毁时的方法。
-
@PostConstruct 注解
生命周期初始化方法,在对象构建以后执行。
-
@PreDestroy 注解
生命周期销毁方法,比如此对象存储到了spring容器,那这个对象在spring容器移除之前会先执行这个生命周期的销毁方法(注:prototype作用域对象不执行此方法)。
完整生命周期
-
实例化阶段(bean对象创建)
在这个阶段中,IoC容器会创建一个Bean的实例,并为其分配空间。这个过程可以通过构造方法 完成。
-
属性赋值阶段
在实例化完Bean之后,容器会把Bean中的属性值注入到Bean中,这个过程可以通过set方法 完成。
-
初始化阶段(bean对象初始化)
在属性注入完成后,容器会对Bean进行一些初始化操作;
-
使用阶段
初始化完成后,Bean就可以被容器使用了
-
销毁阶段
容器在关闭时会对所有的Bean进行销毁操作,释放资源。
编写Spring的bean对象
package org.example.example;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Component
public class Life {
private String meaning;
//实例化
public Life(){
System.out.println("1.调用无参数构造进行实例化");
}
//属性赋值
@Value(value="你不知道的世界")
public void setMeaning( String meaning){
this.meaning = meaning;
System.out.println("2.调用set方法进行属性赋值");
}
//初始化阶段
@PostConstruct
public void init(){
System.out.println("3.执行生命周期初始化方法");
}
//销毁前阶段
@PreDestroy
public void destroy(){
System.out.println("4.执行生命周期的销毁方法");
}
}
运行测试
package org.example.example;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class LifeTest {
public static void main(String[] args) {
// Ctrl + Shift + Alt + c
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("org.example.example");
Life life = context.getBean(Life.class);
//使用阶段
System.out.println("4.开发者使用阶段");
//关闭IoC容器
context.close();
}
}
运行结果
运用场景
Bean初始化和销毁方法可以在Bean生命周期的特定时机执行自定义逻辑,方便地对Bean进行管理和配置。
- 初始化常见应用场景
- 创建数据库连接
- 加载资源文件
- 进行数据校验
- 销毁常见应用场景
- 断开数据库连接
- 保存数据
- 释放占用的资源