有时间生存的豆子
Beans with time to live
对于长寿命的 bean,即单例和原型,是否有某种方法可以指定在调用 Bean 的 destroyMethod
结束时的生命周期?在我看来,生命周期定义为bean一直处于理想状态且未被使用的时间段。
如果没有这样的东西,我有什么办法可以模拟这个吗?也许是其他图书馆!
[更新]
考虑以下场景作为用例:
有各种各样的资源池,可能会在一段时间内频繁使用,然后它们就会过时。最著名的此类资源之一是数据库连接。
对于可能连接到多个数据库的软件,随着时间的推移,每个连接都有不可预测的需求。在某些情况下,连接池可以帮助我们不关闭并重新建立数据库连接,因为这是一个昂贵的过程。他们通过保持连接打开一段时间来实现这一点,如果在此期间有需求,连接的到期日期将被重置。
此场景适用于任何资源,只要有需要,它就应该保存在内存中。当然,资源一旦过期,就应该被踢出内存。此时,任何新的需求都应该在资源再次过期之前重新生成资源。
虽然没有这样的东西,但是我遇到了另一个完美解决这个问题的方法。
我的解决方案是定义一个单例 bean,其中 returns 一个缓存。缓存对象代替 bean 为您提供生存时间功能。当然,如果你需要你的缓存是针对每个用户的,你可以将你的 bean 设置为会话范围而不是单例。
我最终使用了 com.google.common.cache.*
。
对于长寿命的 bean,即单例和原型,是否有某种方法可以指定在调用 Bean 的 destroyMethod
结束时的生命周期?在我看来,生命周期定义为bean一直处于理想状态且未被使用的时间段。
如果没有这样的东西,我有什么办法可以模拟这个吗?也许是其他图书馆!
[更新]
考虑以下场景作为用例:
有各种各样的资源池,可能会在一段时间内频繁使用,然后它们就会过时。最著名的此类资源之一是数据库连接。
对于可能连接到多个数据库的软件,随着时间的推移,每个连接都有不可预测的需求。在某些情况下,连接池可以帮助我们不关闭并重新建立数据库连接,因为这是一个昂贵的过程。他们通过保持连接打开一段时间来实现这一点,如果在此期间有需求,连接的到期日期将被重置。
此场景适用于任何资源,只要有需要,它就应该保存在内存中。当然,资源一旦过期,就应该被踢出内存。此时,任何新的需求都应该在资源再次过期之前重新生成资源。
虽然没有这样的东西,但是我遇到了另一个完美解决这个问题的方法。
我的解决方案是定义一个单例 bean,其中 returns 一个缓存。缓存对象代替 bean 为您提供生存时间功能。当然,如果你需要你的缓存是针对每个用户的,你可以将你的 bean 设置为会话范围而不是单例。
我最终使用了 com.google.common.cache.*
。