全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解Spring Controller autowired Request变量

详解Spring Controller autowired Request变量

spring的DI大家比较熟悉了,对于依赖注入的实现也无须赘述。

那么spring的bean的默认scope为singleton,对于controller来说每次方法中均可以获得request还是比较有意思的。

对于方法参数上的request通过构建方法的参数可以获得最新的request

public final Object invokeForRequest(NativeWebRequest request, ModelAndViewContainer mavContainer,
   Object... providedArgs) throws Exception {
 
  Object[] args = getMethodArgumentValues(request, mavContainer, providedArgs);
  if (logger.isTraceEnabled()) {
   StringBuilder sb = new StringBuilder("Invoking [");
   sb.append(getBeanType().getSimpleName()).append(".");
   sb.append(getMethod().getName()).append("] method with arguments ");
   sb.append(Arrays.asList(args));
   logger.trace(sb.toString());
  }
  Object returnValue = invoke(args);
  if (logger.isTraceEnabled()) {
   logger.trace("Method [" + getMethod().getName() + "] returned [" + returnValue + "]");
  }
  return returnValue;
}

2. 对于controller等单实例变量来说如何动态注入变量呢?spring使用了很聪明的办法

  1. 首先request和用户请求相关
  2. 不同的用户同时访问时是在不同的线程中
  3. 保存了用户的请求在threadlocal中
  4. 用户获取该请求需要手动调用threadlocal来获取
  5. 为了帮助用户减少重复代码,spring可以让用户‘动态'注入request
  6. 当controller在实例化时,动态注册一个proxy到当前request变量中
  7. 此proxy当被使用是可以将所有方法动态路由到threadlocal中该request变量上执行
/**
 * Register web-specific scopes ("request", "session", "globalSession", "application")
 * with the given BeanFactory, as used by the WebApplicationContext.
 * @param beanFactory the BeanFactory to configure
 * @param sc the ServletContext that we're running within
 */
public static void registerWebApplicationScopes(ConfigurableListableBeanFactory beanFactory, ServletContext sc) {
  beanFactory.registerScope(WebApplicationContext.SCOPE_REQUEST, new RequestScope());
  beanFactory.registerScope(WebApplicationContext.SCOPE_SESSION, new SessionScope(false));
  beanFactory.registerScope(WebApplicationContext.SCOPE_GLOBAL_SESSION, new SessionScope(true));
  if (sc != null) {
   ServletContextScope appScope = new ServletContextScope(sc);
   beanFactory.registerScope(WebApplicationContext.SCOPE_APPLICATION, appScope);
   // Register as ServletContext attribute, for ContextCleanupListener to detect it.
   sc.setAttribute(ServletContextScope.class.getName(), appScope);
  }
 
  beanFactory.registerResolvableDependency(ServletRequest.class, new RequestObjectFactory());
  beanFactory.registerResolvableDependency(HttpSession.class, new SessionObjectFactory());
  beanFactory.registerResolvableDependency(WebRequest.class, new WebRequestObjectFactory());
  if (jsfPresent) {
   FacesDependencyRegistrar.registerFacesDependencies(beanFactory);
  }
}


 

 
 /**
 * Factory that exposes the current request object on demand.
 */
 @SuppressWarnings("serial")
 private static class RequestObjectFactory implements ObjectFactory<ServletRequest>, Serializable {

 public ServletRequest getObject() {
  return currentRequestAttributes().getRequest();
 }

 @Override
 public String toString() {
  return "Current HttpServletRequest";
 }
 }
 

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Spring  # Controller  # autowired  # Request变量  # Request变量的实例详解  # 如何在springMVC的controller中获取request  # 关于Spring MVC在Controller层中注入request的坑详解  # Spring实现在非controller中获取request对象  # 可以获得  # 是在  # 如有  # 希望能  # 谢谢大家  # 很聪明  # 存了  # 疑问请  # 中均  # 有意思  # 使用了  # arguments  # method  # getName  # asList  # Arrays  # trace  # getMethod  # Invoking  # sb 


相关文章: 建站之星2.7模板快速切换与批量管理功能操作指南  Swift中switch语句区间和元组模式匹配  香港服务器网站推广:SEO优化与外贸独立站搭建策略  如何用已有域名快速搭建网站?  宝塔建站无法访问?如何排查配置与端口问题?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  广州营销型建站服务商推荐:技术优势与SEO优化解析  小型网站建站如何选择虚拟主机?  文字头像制作网站推荐软件,醒图能自动配文字吗?  江苏网站制作公司有哪些,江苏书法考级官方网站?  建站之星后台管理如何实现高效配置?  如何在建站之星网店版论坛获取技术支持?  定制建站流程步骤详解:一站式方案设计与开发指南  网站网页制作专业公司,怎样制作自己的网页?  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  网站制作免费,什么网站能看正片电影?  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  如何选择高效可靠的多用户建站源码资源?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  如何快速搭建支持数据库操作的智能建站平台?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  如何实现建站之星域名转发设置?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  如何用花生壳三步快速搭建专属网站?  如何选择适合PHP云建站的开源框架?  免费网站制作appp,免费制作app哪个平台好?  如何在景安云服务器上绑定域名并配置虚拟主机?  如何在VPS电脑上快速搭建网站?  建站之星安装失败:服务器环境不兼容?  如何快速搭建虚拟主机网站?新手必看指南  如何零基础在云服务器搭建WordPress站点?  如何选购建站域名与空间?自助平台全解析  建站之星导航如何优化提升用户体验?  高端企业智能建站程序:SEO优化与响应式模板定制开发  TestNG的testng.xml配置文件怎么写  制作网站公司那家好,网络公司是做什么的?  简历在线制作网站免费,免费下载个人简历的网站是哪些?  建站之星如何实现五合一智能建站与营销推广?  如何高效配置IIS服务器搭建网站?  专业商城网站制作公司有哪些,pi商城官网是哪个?  建站之星如何一键生成手机站?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  建站之星代理如何优化在线客服效率?  C#如何在一个XML文件中查找并替换文本内容  如何通过商城免费建站系统源码自定义网站主题?  设计网站制作公司有哪些,制作网页教程?  如何在阿里云域名上完成建站全流程?  在线制作视频的网站有哪些,电脑如何制作视频短片?  如何零基础开发自助建站系统?完整教程解析 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。