当我的应用程序完成后,我希望关闭Spring上下文。
相关代码有一个ApplicationContext
引用,但我找不到close
方法。
将你的 ApplicationContext
向下转型为 ConfigurableApplicationContext
,这个接口定义了 close()
方法:
((ConfigurableApplicationContext)appCtx).close();
您需要按照以下方式向JVM注册关闭挂钩:
((AbstractApplicationContext)appCtx).registerShutdownHook();
了解更多信息,请参见:Spring手册:3.6.1.6 非Web应用程序中优雅地关闭Spring IoC容器
try(final AbstractApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[]{"classpath*:META-INF/spring/*.xml" }))
{
//write your code
}
如果你像下面这样初始化上下文
ApplicationContext context = new ClassPathXmlApplicationContext(beansXML);
像这样的干净环境
((ClassPathXmlApplicationContext) context).close();
关闭ApplicationContext
对象的步骤:
ApplicationContext
对象强制转换为ConfigurableApplicationContext
对象。示例:
ApplicationContext context = new ClassPathXmlApplicationContext("mybeans.xml");
((ConfigurableApplicationContext)context ).close();
ApplicationContextinterface
的抽象实现。 AbstractApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
context.close();
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("SpringCnf.xml");
Resturant rstro1=(Resturant)context.getBean("resturantBean");
rstro1.setWelcome("hello user");
rstro1.welcomeNote();
((ClassPathXmlApplicationContext) context).close();
AbstractApplicationContext
。 - eeezyyAbstractApplicationContext
是一个类,而ConfigurableApplicationContext
是由该类实现的接口,因此在大多数情况下最好使用后者。 - Periata BreattaConfigurableApplicationContext
现在扩展了Closable
接口(不知道是在哪个版本中进行的更改,但是4.2.x的文档中显示了这一点,而3.0.x则没有),所以更简短的写法是((Closable)context).close();
。 - Periata Breattatry (ConfigurableApplicationContext context = new ....) { /* 在这里编写您的代码 */ } // 当您离开try块时,上下文被关闭
。 - Periata Breatta