java - @Autowired HttpServletResponse

标签 java spring spring-mvc autowired

我正在寻找一种 Autowiring HttpServletResponse 的方法。它不适用于开箱即用的 Spring ,但我发现 this description .这可行,但有点烦人,在那个 Spring 显然有一种机制可以使对象请求范围(即 HttpServletRequest),这似乎是一个固定在顶部的黑客。

有没有办法与 spring 用于 HttpServletRequest 的机制相同?而且,知道为什么 Spring 团队决定只使 HttpServletRequest 能够 Autowiring (并排除 HttpServletResponse)吗?

最佳答案

也许有一些解决方法,但不是那么明显,因为这不是它的本意。 Spring MVC 意味着具有单例 @Controller bean,它们提供将请求和响应作为参数的 @RequestMapping 方法。

如果您需要在其他地方(服务层)做出响应,请不要这样做。响应不应超出 Web( Controller )层。

要注入(inject)响应,您需要: - 将响应存储在 ThreadLocal - 制作返回当前响应的工厂 bean

关于the example code you showed - 我不确定您是否不需要工厂 bean 来返回代理(实现 HttpServletResponse),而代理又会返回当前响应。而且它变得相当复杂。

但最终 - 你不应该那样做。如果您需要拦截多个 Controller 调用,请使用 mvc-interceptor。如果确实需要使用切面,可以将响应作为参数传递给被拦截的方法。

关于java - @Autowired HttpServletResponse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6984054/

相关文章:

JavaFX ScrollBar setOnMousePressed 不工作

java - JPanel 不通过定时器重绘

Javascript删除不会触发Java后端

java - java中如何实现 session 超时?

java - 为什么 Spring MVC 找不到我的 View 路径?

java - Flyway 是否知道数据库状态或它是否专门验证迁移文件的不变性?

Java 8 - 向需要泛型类型的方法提供原始类型参数会导致其返回类型被删除

java - 如何为 tomcat web 应用程序实现控制台命令行?

Spring MVC i18n Hibernate 验证

java - Spring MVC 中的sample_en.jsp 和sample_fr.jsp