SpringBoot容器初始化/卸载资源的几种姿势

日常开发中长需要在Bean初始化过程中加载一些资源或者是在Bean销毁前释放一些资源,Spring提供了多种不同的方式初始化和销毁Bean。这里我收集了几个分享给进来的朋友们!

> 1. initMethod / destroyMethod

@Configuration
public class InitializeOne {
	
	@Bean(initMethod = "init", destroyMethod = "destroy")
	 public HelloService hello() {
		
		return new HelloService();
	 }
}

HelloService.java

public class HelloService {
	
	public void init() {
		System.out.println("this is init......");
	}
	
	public void destroy() {
		System.out.println("this is destroy......");
	}

}

> 2. InitializingBean (初始化)、DisposableBean (销毁)

@Configuration
public class initializeTwo implements InitializingBean, DisposableBean{

	@Override
	public void afterPropertiesSet() throws Exception {
		// TODO Auto-generated method stub
		System.out.println("this is InitializingBean 的 init......");
	}

	@Override
	public void destroy() throws Exception {
		// TODO Auto-generated method stub
		System.out.println("this is DisposableBean 的 destory......");
	}

}

> 3. @PostConstruct (初始化)、 @PreDestroy(销毁)

注:这两个不是spring的注解

@Configuration
public class initializeThree {
	
	@PostConstruct
	public void init() {
		System.out.println("@PostConstruct 的 init......");
	}
	
	@PreDestroy
	public void preDestory() {
		System.out.println("@PreDestroy 的 preDestory......");
	}

}

> 4. ContextStartedEvent (初始化)、ContextClosedEvent (销毁)

说明:这种方式使用 Spring 事件机制,Spring 启动之后调用ApplicationContext.start() 方法将会发送 ContextStartedEvent 事件,调用ApplicationContext.close()将会发送 ContextClosedEvent事件,这种方式会相对麻烦一些,如果不想用这种方式可以修改为第5中方法。

@Configuration
public class initializeFour implements ApplicationListener{

	@Override
	public void onApplicationEvent(ApplicationEvent event) {
		// TODO Auto-generated method stub
		if(event instanceof ContextStartedEvent) {
			System.out.println("this is ContextStartedEvent ......");
		}else if(event instanceof ContextClosedEvent) {
			System.out.println("this is ContextClosedEvent ......");
		}
		
	}

> 5. ApplicationListener<ContextRefreshedEvent>

说明:监听 ContextRefreshedEvent 事件,一旦 Spring 容器初始化完成,就会发送 ContextRefreshedEvent。

@Configuration
public class initializeFour implements ApplicationListener<ContextRefreshedEvent>{

	@Override
	public void onApplicationEvent(ContextRefreshedEvent event) {
		// TODO Auto-generated method stub
		if(event.getApplicationContext().getParent() == null) {
			System.out.println("this is ContextRefreshedEvent ......");
		}
	}
	
}

启动程序,运行结果如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值