Spring bean的DESTROY-METHOD属性和web应用程序“prototype”d bean

时间:2010-05-11 10:16:53

标签: java spring scope javabeans

可以使属性“destroy-method”工作。

首先,即使我将不存在的方法名称输入“destroy-method”属性,

Spring初始化完成得很好(已经很奇怪!)。

接下来,当bean有一个“原型”范围时,我想它必须在应用程序之前被销毁

已关闭。这不会发生,在我的情况下根本就没有调用过。

虽然在提取这个bean之后,我可以明确地调用这个方法并且它可以完成它的工作。

你能解释为什么在我的Spring 2.5案例中从未调用过这个方法吗?

P.S。该方法存在,它是公开的,没有参数。

我认为这似乎是一项更艰巨的任务。

问题是每当关闭上下文时都会调用此destroy方法,并且 这是一种罕见的情况。

我的问题是:

我有一个网络应用程序。我有一个“原型” - 's bean。

我需要的是当前会话关闭时,Spring会自动调用这个destroy方法。

我可以手工完成,但有没有解决方法让Spring做这个工作?它会在会话被销毁后销毁bean,Spring可能会在销毁之前调用该bean上的方法吗?

P.S。 Spring不管理原型bean的生命周期,因此Spring不会破坏它们:)

1 个答案:

答案 0 :(得分:8)

Spring容器不管理原型bean。

来自reference documentation

的摘录
  因此,虽然初始化   调用生命周期回调方法   在所有对象上,无论范围如何,在   配置原型的情况   破坏生命周期的回调是   不叫。

如果可能,请尝试请求或会话范围。

  

最终是HTTP会话   丢弃,作为范围的bean   特定的HTTP会话也是   丢弃。

顺便说一句:会话和请求范围仅适用于您使用网络感知ApplicationContext,例如XmlWebApplicationContext