Spring bean,XmlWebApplicationContext中的生命周期(Web上下文)

时间:2010-02-23 02:38:42

标签: java spring

我已经找到关于此问题的previous SF question,我相信设置init-methoddestroy-method属性就足够了。但我希望以一种不同的方式提出这个问题以促进我的理解。

如果我理解正确,实现org.springframework.context.Lifecycle的类在Web应用程序上下文(即org.springframework.web.context.support.XmlWebApplicationContext)中的行为将与其他应用程序上下文中的行为不同?这样做是因为start()的{​​{1}}(将启动包含的生命周期bean)将在加载上下文配置文件之前执行。

这是对的吗?

2 个答案:

答案 0 :(得分:1)

我不这么认为。 start()方法由doStart()调用,两者都在AbstractApplicationContext中,这是所有应用程序上下文的超类。所以应该没有区别。

答案 1 :(得分:1)

Lifecycle接口应该由想要参与容器的生命周期的bean实现。这主要是由容器本身实现的(参见docs here),尽管这些容器中的bean也可以在他们选择时实现它,并且开始/停止信号将传播给它们。

start()stop()方法基本上是容器刚刚开始启动或即将停止的通知。

我很难为应用程序组件找到一个好的用例。业务对象应该只关注自己的生命周期,而不是容器的生命周期。一个很好的理由是当你使用非单例范围(例如请求范围)时,bean的生命周期独立于容器的范围。