欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring之Bean的生命周期

程序员文章站 2022-03-03 12:39:42
...

什么是Bean的生命周期


Bean的生命周期指的是Bean创建→初始化→销毁的过程
我们可以自定义Bean初始化和销毁方法
容器在Bean进行到当前生命周期的时候,来调用自定义的初始化和销毁方法。

初始化与销毁——自定义方法


我们创建一个Bike类

public class Bike {
	public Bike() {
		System.out.println("Bike 构造方法");
	}
	public void init() {
		System.out.println("Bike init");
	}
	public void destroy() {
		System.out.println("Bike destory");
	}
}

通过@Bean将Bike类添加到IOC容器中,并对初始化和销毁方法进行配置

@Bean(initMethod="init",destroyMethod="destroy")

我们对其进行测试

AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(MainConfig.class);
ac.close();

程序运行的结果如下:

Bike 构造方法
Bike init
Bike destory

可以看到,Bean的创建过程中首先执行了构造方法,然后调用了初始化方法,当我们调用ac.close()方法时,Bean的destory方法被调用。
需要注意的是:
对于单实例的Bean,可以正常调用初始化和销毁方法
对于多实例的Bean,容器只会负责初始化,但不会管理Bean,容器关闭时不会调用销毁方法

初始化与销毁——实现接口


1、实现InitializingBean接口的afterPropertiesSet()方法,当BeanFactory创建好对象,且把Bean所有属性设置好之后,会调用这个方法,相当于初始化方法。
2、实现DisposableBean的destory()方法,当Bean销毁时,会把单实例Bean进行销毁。

public class Bike implements InitializingBean, DisposableBean {
	public Bike() {
		System.out.println("Bike 构造方法");
	}
	//在bean属性全部被设置之后,BeanFactory会调用该方法
	public void afterPropertiesSet() throws Exception {
		System.out.println("Bike init method");
	}
	//由BeanFactory在销毁单例时调用
	public void destroy() throws Exception {
		System.out.println("Bike destroy method");
	}
}

初始化与销毁——注解使用


可以使用@PostConstruct、@PreDestroy注解
@PostConstruct:在Bean创建完成,且属于赋值完成后进行初始化,属于JDK规范的注解
@PreDestroy:在Bean将被移除之前进行通知,在容器销毁之前进行清理工作

public class Bike {
	public Bike() {
		System.out.println("Bike 构造方法");
	}
	@PostConstruct
	public void init() {
		System.out.println("Bike init @PostConstruct");
	}
	@PreDestroy
	public void destroy() {
		System.out.println("Bike destory @PreDestroy");
	}
}