我正在寻找一种 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/