spring - 如何在 Spring 启动期间生成 HttpServletRequest 以进行 bean 初始化?

标签 spring servlets spring-mvc

我希望有一个 Bean 可以运行所有 FreeMarker 模板,并为每个模板实例化一个 FreeMarkerView,以便预加载 Bean。我还想做一些其他类似的优化,这些优化需要 HttpServletRequest。

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

肯定还有其他人想要在启动时或计划任务等情况下设置 HttpServletRequest 而不发出 HTTP 请求?

最佳答案

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

这也意味着在启动期间根本不可能获得任何 HTTP servlet 请求(至少以 Tomcat 为例),因为还没有任何请求。是的,模拟是正确的方法,但恐怕如果这些库需要 HttpServletRequest 实例,简单的模拟可能还不够。

关于spring - 如何在 Spring 启动期间生成 HttpServletRequest 以进行 bean 初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9130390/

相关文章:

java - 如何将 id 传递给 :value and get data of type List<Ingredient>?

JavaScript 没有返回 false

java - 如何在jsp中迭代多重映射值

java - HttpServletRequest#getPart 不存在?

java - 如何计算每个 session 中的警告日志计数?

java - 如何在 Apache POI 中设置 Excel 默认行高

java - 创建名称为 'org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping' 的 bean 时出错

java - Spring Reactor Mono 在返回数据之前等待订阅者完成其任务

java - 我可以使用哪种 Spring 集成模式?

java - 从 spring ReloadableResourceBundleMessageSource 获取所有键