Spring bean的生命周期

最近遇到一个问题,发现系统中总是出现redis连接池拿不到的问题。刚开始以为是redis的线程池设置的太小,所以就增大了连接池的数量,但是还是经常会出现类似的问题。左思右想觉得可能是Spring容器的问题,redis的bean是托管于Spring的,当Spring容器关闭的时候,自然就拿不到redis的连接池。后面经过研究查询,发现我的猜想应该是错误的。虽然这次没有解决实际的问题,但是却加深了我对spring的了解。以下是一些我查询的资料。仅供大家参考。


Spring 容器中的 Bean 是有生命周期的,Spring 允许 Bean 在初始化完成后以及销毁前执行特定的操作。下面是常用的三种指定特定操作的方法:

  • 通过实现InitializingBean/DisposableBean 接口来定制初始化之后/销毁之前的操作方法;
  • 通过<bean> 元素的 init-method/destroy-method属性指定初始化之后 /销毁之前调用的操作方法;
  • 在指定方法上加上@PostConstruct或@PreDestroy注解来制定该方法是在初始化之后还是销毁之前调用。
singleton作用域的Bean通常会随着容器的关闭而销毁,但问题是:ApplicationContext容器在什么时候关闭呢?在基于Web的ApplicationContext实现中,系统已经提供了相应的代码保证关闭Web应用时恰当的关闭Spring容器。但对于一个非Web应用的环境下,为了让Spring容器优雅的关闭,并自动调用singleton上的相应回调方法,则需要在JVM里面注册一个关闭钩子(shutdown hook),这样就可以保证Spring容器被恰当关闭,并自动执行singleton的Bean里面的相应回调方法。



详情请查阅:https://my.oschina.net/itblog/blog/205816,http://blog.csdn.net/clerk0324/article/details/25374041
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值