2012-02-03 137 views
2

我想要一个运行所有FreeMarker模板的bean,并为每个模板实例化一个FreeMarkerView,以便预加载这些bean。还有一些其他类似的优化,我想这样做需要一个HttpServletRequest。如何在Spring启动期间为bean初始化生成HttpServletRequest?

所以我的问题是这样的:是否有任何正常的方式在Spring中在应用程序启动期间在Spring bean上运行init()方法并为它提供某种HttpServletRequest?我想避免嘲笑一个完整的HttpServletRequest,并且我知道我总是可以设置一个控制器并打开一个套接字并向它发送一个请求,但是我想知道是否有更好的或更正常的方法。

肯定还有其他人希望在启动或计划任务等情况下建立HttpServletRequest而不发出HTTP请求?

+0

看看这个堆栈溢出问题:[如何让Tomcat在启动时预编译JSP?](http://stackoverflow.com/questions/497830/how-can-i-make-tomcat-pre -compile-jsps-on-startup)这是关于JSP的,但我认为你可以重复使用你的主题的想法。 – Ralph 2012-02-03 15:11:59

回答

4

当应用程序启动时,还没有HTTP servlet请求。事实上,在启动过程中,Tomcat开始在8080端口上监听和接受连接,但只有在所有应用程序成功启动后才将它们传递给相应的Servlet。这意味着你不能在启动期间调用自己,因为这会导致死锁 - 你正在等待被Tomcat阻止的等待你的响应。

这也意味着在启动期间根本不可能(至少在Tomcat被视为exmaple时)获取任何HTTP servlet请求,因为这里绝对没有请求。是的,嘲笑是正确的方式,但是如果这些库需要一个实例,那么简单的模拟可能不够。

+0

明白了。如果我想用某种启动后的钩子来启动一个方法,那将会是太多了。即使有人或我自己构建了一个,我怎样才能创建一个“HttpServletRequest”而不打开与自己的连接? – 2012-02-03 15:52:17

相关问题