Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringBeans,XmlWebApplicationContext(web上下文)中的生命周期_Java_Spring - Fatal编程技术网

Java SpringBeans,XmlWebApplicationContext(web上下文)中的生命周期

Java SpringBeans,XmlWebApplicationContext(web上下文)中的生命周期,java,spring,Java,Spring,关于这个问题,我已经找到了一个解决方案,我相信设置init方法和destroy方法属性就足够了。但我希望能以另一种方式问这个问题,以加深我的理解 如果我理解正确,那么实现org.springframework.context.Lifecycle的类在web应用程序上下文(即org.springframework.web.context.support.XmlWebApplicationContext)中的行为会与在其他应用程序上下文中不同吗?它之所以会这样做,是因为XmlWebApplicati

关于这个问题,我已经找到了一个解决方案,我相信设置
init方法
destroy方法
属性就足够了。但我希望能以另一种方式问这个问题,以加深我的理解

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


这是对的吗?

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

生命周期接口应该由希望参与容器生命周期的bean实现。这主要是由容器本身实现的(请参阅),尽管这些容器中的bean也可以实现它(如果它们选择的话),并且启动/停止信号将传播给它们

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


我正在努力为这个应用程序组件找到一个好的用例。业务对象应该只关注它们自己的生命周期,而不是容器的生命周期。一个很好的原因是当您使用非单例作用域(例如请求作用域)时,bean的生命周期独立于容器的生命周期。

谢谢。您发送给我的链接似乎并不表示生命周期仅适用于容器。它将其作为一个bean生命周期进行讨论。事实上,我没有意识到SmartLifecycle等。我确实同意一个对象对自身的控制越多越好,但是一个对象的生命周期通常是存在的,因为它不控制任何东西。@Matt:我的意思是,
lifecycle
只针对容器生命周期,而不仅仅针对容器。如果愿意,bean可以参与容器生命周期,但这是一个非常特殊的要求。谢谢,这更有意义。那么,对于web应用程序和XmlWebApplicationContext,容器的生命周期是在加载bean定义之前开始的吗?这就是为什么我没有看到为我定义的bean调用start()的原因吗?我看到并想到了同样的事情。我遵循了该代码,但我从未看到它在web应用程序中被调用。我正在尝试查看加载到我的应用程序中的应用程序上下文是否调用了doStart()。我今天会尝试更多,让你知道。