应用程序完成后,我想关闭spring上下文。
相关代码有ApplicationContext
参考,但我找不到close
方法。
应用程序完成后,我想关闭spring上下文。
相关代码有ApplicationContext
参考,但我找不到close
方法。
Answers:
垂头丧气你ApplicationContext
要ConfigurableApplicationContext
定义close()
的方法:
((ConfigurableApplicationContext)appCtx).close();
AbstractApplicationContext
是一个类,并且ConfigurableApplicationContext
是由该类实现的接口,所以在大多数情况下使用后者可能更好。
ConfigurableApplicationContext
现在的扩展Closable
(不知道此更改是在哪个版本中进行的,但是4.2.x的文档显示了该更改,而3.0.x并未显示),因此要短得多((Closable)context).close();
。
AutoCloseable
实现,这意味着只要您将上下文存储在AutoCloseable
界面可见的变量中即可使用try-with-resources ,即try (ConfigurableApplicationContext context = new ....) { /* your code goes here */ } // context is closed when you leave the try block
您需要向JVM注册一个关闭钩子,如下所示:
((AbstractApplicationContext)appCtx).registerShutdownHook();
有关更多信息,请参见:Spring手册:3.6.1.6在非Web应用程序中正常关闭Spring IoC容器
如果您像下面这样初始化上下文
ApplicationContext context = new ClassPathXmlApplicationContext(beansXML);
像这样干净的环境
((ClassPathXmlApplicationContext) context).close();
关闭ApplicationContext
对象的步骤
ApplicationContext
对象强制转换为ConfigurableApplicationContext
对象。例:
ApplicationContext context = new ClassPathXmlApplicationContext("mybeans.xml");
((ConfigurableApplicationContext)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