弹簧上下文无法加载时停止服务器的已知方法?

有时在开发期间,某些东西会被破坏,导致spring上下文无法加载。 问题是有时错误只是在某些bean中,但是webapp的其余部分是部分加载的,然后你会得到一些奇怪的行为。

有没有一种已知的方法可以让Spring停止服务器进程以防万一发生错误? 比如某些bean注入失败,或者某些PostConstruct中发生了一些NPE。

像web.xml中的stopOnError = true之类的东西。

所以最终我找到的解决方案是:创建一个实现ServletContextListener的类,将其命名为ApplicationLoaderListener。

在web.xml中设置此类:

 com.my.package.ApplicationLoaderListener  

添加一个私有成员:

 private final ServletContextListener loader = new ContextLoaderListener(); 

这个类必须实现两个接口方法,相关的接口方法是contextInizialized:

 @Override public void contextInitialized(ServletContextEvent sce) { try { loader.contextInitialized(sce); } catch (BeanCreationException e) { handle(e); } } 

而handle()的实现:

 private void handle(BeanCreationException e) { log.error("=============== FATAL =============== - failed to create bean: ", e); System.exit(1); } 

为了使代码完整,第二种方法:

 @Override public void contextDestroyed(ServletContextEvent sce) { loader.contextDestroyed(sce); }