2011-02-17 102 views
1

我正在使用Spring实现一个Web应用程序。我使用Spring的ContextLoaderListener来加载我的应用程序上下文,并使用Spring的DispatcherServlet从{name} -servlet.xml加载相关的bean,它们引用主应用程序上下文中的bean。我希望能够在容器外部集成测试这些Spring配置,以在部署到Tomcat之前验证所有部件是否正确连接。但是,我的应用程序在容器中运行时需要一些预定的后台处理。在一个普通的HttpServlet中,我只需实现init()和destroy()。我读过的所有建议都建议使用InitializingBean进行这种初始化。然而,如果我使用InitializingBean,afterPropertiesSet()被调用,无论我是在容器内部还是在集成测试中 - 并且在容器外部,我都无法访问后台任务需要的资源。有没有更好的方法来执行我通常在init()和destroy()中执行的任务,以便它们只能在部署为webapp时运行?在Spring Web应用程序中实现servlet生命周期方法?

+0

我想也许我可以在控制器的InitializingBean afterPropertiesSet()方法内使用getServletContext()来确定我是否作为一个servlet运行。这会在容器外引发异常,所以我可以使初始化步骤有条件。它的工作原理,但它似乎是一个黑客。 – 2011-02-17 19:27:04

回答

1

您是否考虑过使用测试弹簧配置文件来覆盖实现后台进程的bean?

通过这种方式,除了重写的bean之外,Spring配置中的其他所有东西都能正常工作。

+0

我很喜欢这个想法。它与我正在做的其他事情非常吻合,包括初始化Bean以将测试数据加载到数据库中,并且它使代码中的测试细节保持不变。谢谢! – 2011-02-22 18:28:55

相关问题