注解: @postConstruct //指定Bean实例完成初始化后调用的方法,用于监控Bean对象初始化节点 @PreDestroy //指定Bean实例销毁前调用的方法,用于监控Bean对象销毁节点
Bean的生命周期是指Bean实例被创建、初始化和被销毁的过程。在Bean的两种作用域singleton和prototype中,Spring容器对Bean的生命周期管理是不同的。
在singleton作用域中,Spring容器可以管理Bean的生命周期控制Bean的创建、初始化和被销毁;
在prototype作用域中,Spring容器只负责创建Bean实例的创建;
singleton和prototype:Spring Bean作用域_FOOL_amazing的博客-CSDN博客
代码:
Student.java
package com.zd.pojo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.io.Serializable;
@Component("student")
public class Student implements Serializable {
@Value("1")
private String id;
@Value("张三")
private String name;
public void setId(String id){
this.id=id;
}
public String getId(){
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@PostConstruct //使用@PostConstruct标注Bean对象初始化节点的监控方法
public void init(){
System.out.println("Bean的初始化完成,调用init()方法");
}
@PreDestroy
public void destroy(){
System.out.println("Bean销毁前调用destroy()方法");
}
@Override
public String toString() {
return "Student{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--组件扫描器-->
<context:component-scan base-package="com.zd"/>
测试类:
package com.zd;
import com.zd.pojo.Student;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
static ApplicationContext ac=null;
{
ac=new ClassPathXmlApplicationContext("applicationContext.xml");
}
@Test
public void PostConstructAndPreDestroyTest(){
Student student= (Student) ac.getBean("student");
System.out.println(student);
//销毁Spring容器中的所有Bean
AbstractApplicationContext abstractApplicationContext = (AbstractApplicationContext) ac;
abstractApplicationContext.registerShutdownHook();
}
}
结果: