【发布时间】:2015-08-31 22:12:04
【问题描述】:
我学习spring框架有一段时间了。但是每当我寻找初始化和销毁回调时,每个示例都使用ConfigurableApplicationContext而不是ApplicationContext。谁能解释一下原因?
【问题讨论】:
我学习spring框架有一段时间了。但是每当我寻找初始化和销毁回调时,每个示例都使用ConfigurableApplicationContext而不是ApplicationContext。谁能解释一下原因?
【问题讨论】:
因为所有常见的ApplicationContext实现其实都是ConfigurableApplicationContext。从 ConfigurableApplicationContext 的 javadoc 中提取:
大多数应用程序上下文都可以实现 SPI 接口。
和
这里封装了配置和生命周期方法,以避免它们对 ApplicationContext 客户端代码显而易见。目前的方法应该只被启动和关闭代码使用
这意味着当您使用一个应用程序上下文时,即从中获取 bean,您仅将其用作 ApplicationContext,但当您管理其生命周期(初始化和销毁)时,您使用的方法来自ConfigurableApplicationContext
【讨论】:
ApplicationContext:这是最强大的容器,与 Bean-factory(核心容器)相比。
ConfigurableApplicationContext:ApplicationContext 容器的实现之一。此容器用于事件处理提议。
如果你实现了以下方法,并且你的 Bean Class 扩展了ApplicationListner 接口,那么当这些方法被执行时,你的 Bean 会得到相关的事件。
void refresh()
void close();
void shutdown();
【讨论】: