一、bean的生命周期
1、bean的初始化和销毁
bean的生命周期大致可分为bean创建---->初始化---->bean的销毁(单例bean会在容器关闭时销毁)。bean的创建我们知道spring会在程序启动时,会帮我们创建bean并加入到容器中。但是bean创建完成以后,我们可以执行对bean进行一些初始化操作。以及在容器关闭时,我们也可以对单实例bean进行销毁操作。下面介绍几种指定bean的初始化和销毁方法。
1.1使用@Bean的两个属性initMethod(指定初始化方法)和destroy(指定销毁方法)
在配置类中使用@bean想容器注册组件时,可以通过属性指定组件的初始化和销毁方法
@Configuration
@ComponentScan(basePackages = {
"com.tellhow.review.spring_annotation.lifecycle"})
@Slf4j
public class MainConfigLifeCycle {
@Bean(value = "naturalDisasterPojo2",initMethod = "init",destroyMethod = "destory")//指定初始化方法和销毁方法
public NaturalDisasterPojo naturalDisasterPojo(){
return new NaturalDisasterPojo();
}
public static void main(String[] args) {
AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(MainConfigLifeCycle.class);
String[] beanDefinitionNames = context.getBeanDefinitionNames();
for (String beanName:beanDefinitionNames){
log.info(beanName);
}
context.close();//容器关闭,单例bean就会被销毁
}
}
@Slf4j
class NaturalDisasterPojo {
private String name;
//初始化方法
public void init(){
log.info(name+"选择修习道路,并修炼成天灾");
}
public NaturalDisasterPojo() {
log.info("天灾坑位留出");
}
//销毁方法
public void destory(){
log.info(name+"陨落");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
1.2、使用@PostConstruct和@PreDestroy注解
将@PostConstruct标在方法上,这个方法就是bean的初始化方法。将@PreDestroy表在方法上,那么这个方法就是bean的销毁方法。
@Component
@Slf4j
public class WhiteTiger {
private String name;
@PostConstruct
public void init() {
//初始化方法
log.info(name+"努力修习,获得白虎称号");
}
@PreDestroy
public void destory() {
//销毁方法