- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这对我来说很奇怪。我有以下代码:
@Controller
public class MyTestController {
@Autowired
private HttpServletRequest request;
@RequestMapping("/print/")
public String PrintInfo() throws Exception {
Thread.sleep(5000);
System.out.println("name:" +request.getParameter("name"));
System.out.println("hashcode:" +request.hashCode());
return "testpage";
}
}
我同时访问了以下网址:
http://127.0.0.1:8080/MyApp/print/?name=tom
http://127.0.0.1:8080/MyApp/print/?name=mike
它打印了:
name:tom
hashcode:2006506443
name:mike
hashcode:2006506443
MyTestContorller 是单例的。请求的哈希码相同,这意味着不同的请求具有相同的实例。
但为什么 request.getParameter("name")
给我正确的结果?也许getParameter方法只是一个需要从其他对象读取数据的方法?
我不知道,这让我很困惑。谁能解释一下?
最佳答案
摘录 from the official documentation应该回答你的问题:
Scoped beans as dependencies
The Spring IoC container manages not only the instantiation of your objects (beans), but also the wiring up of collaborators (or dependencies). If you want to inject (for example) an HTTP request scoped bean into another bean of a longer-lived scope, you may choose to inject an AOP proxy in place of the scoped bean. That is, you need to inject a proxy object that exposes the same public interface as the scoped object but that can also retrieve the real target object from the relevant scope (such as an HTTP request) and delegate method calls onto the real object.
请求范围 基于 RequestContextHolder 中的线程本地属性(默认情况下由 DispatcherServlet
为每个请求初始化)。
因此您的 HttpServletRequest
是一个动态 JDK 代理,它在每次方法调用时检查线程本地属性以获取真正的请求对象并调用它。
可解析的请求依赖本身被注册为一个 bean 作为 WebApplicationContext
初始化的一部分 WebApplicationContextUtils
.
这是一个稍微简化的图(图片中的所有内容实际上都是单例):
关于java - 在Spring MVC中,Controller是单例的,为什么我的代码是线程安全的?(Autowired HttpServeltRequest),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41933457/
我是一名优秀的程序员,十分优秀!