有时在开发过程中,某些东西会损坏,从而导致spring上下文无法加载。问题在于,有时错误仅出现在某些Bean中,但是Webapp的其余部分已部分加载,然后您会得到一些奇怪的行为。
有什么已知的方法可以使Spring在发生问题时停止服务器进程?例如某些bean注入失败,或者某些NPE发生在某些PostConstruct之类的东西中。
web.xml中的stopOnError = true之类的东西。
因此,最终我找到的解决方案是:创建一个实现ServletContextListener的类,将其称为ApplicationLoaderListener。
在web.xml中设置此类:
<listener> <listener-class>com.my.package.ApplicationLoaderListener</listener-class> </listener>
向其中添加一个私人成员:
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); }