@Autowired
HttpServletRequest request;
和我一样,你一定会想到spring默认创建Controller单例,这样会不会有线程安全问题?
实际上:Spring已经通过ThreadLocal和JDK代理解决了单例的线程安全问题。
实际原理:1.上述注解在Spring容器进行初始化时就会被注入,只不过注入的并非真正的HttpServletRequest对象,而是JDK的代理对象(通过代码debug会发现确实是一个Proxy对象),在方法执行的时候才调用真正的HttpServletRequest对象去执行。
[if !supportLists]2. [endif]Spring能实现在多线程环境下,将各个线程的request进行隔离,且准确无误的进行注入,奥秘就是ThreadLocal。









网友评论