由于在spring中request对象的scope限制导致了request对象无法直接注入到单例bean中,所以webx对其进行了增强实现,达到单例注入的目的。
实现原理大致如下:
1 启动时注册全局的代理对象(解决request不能注入问题):
   spring容器启动时加载RequestContextBeanFactoryPostProcessor,注册四个单例对象:HttpServletRequest,HttpSession,HttpServletResponse,RequestContext(封装的增强版对象)。
   容器启动时执行:
    
 
加载:RequestContextBeanFactoryPostProcessor,注册全局的request单例bean对象。
 
 
 
 
2 代理增强(第一步已经实现了可以注入request到bean中了,当实际代码中调用request对象的方法时,会触发代理增强):
    
   为了实现增强,webx在注入时使用了cglib动态代理,如下:实际调用时会进入对应代理工厂的getObject()。
 
 
 
 
 
    这里request代理对象调用时会进入RequestProxyTargetFactory的getObject();
 
 
  可以看到getObject时会从当前线程中去获取request对象。
 
  综上:webx是通过cglib动态代理注册request的代理对象,然后当代理对象执行方法调用时都会进入到增强操作去当前线程获取最新的request对象然后执行相应方法。
 
  response,session,还有webx增强后的requestContext三个对象均同理。

最新文章

  1. 安卓易学,爬坑不易——腾讯老司机的RecyclerView局部刷新爬坑之路
  2. 来吧,HTML5之一些注意事项
  3. C语言printf()函数:格式化输出函数
  4. CART:分类与回归树
  5. Linux gcc编译(动态库,静态库)
  6. Linux-VPN安装配置方法
  7. 相对路径json无法获取
  8. 女朋友也能看懂的Zookeeper分布式锁原理
  9. java类与对象(属性,方法)的使用
  10. 对Java中properties类的理解
  11. 将Elasticsearch的快照备份到HDFS
  12. Application Initialization UI for IIS 7.5
  13. GO linux LiteIDE
  14. Eclipse在线安装hibernate tools插件
  15. [NOIP2013 花匠] 新人解题报告
  16. 【luogu P4137 Rmq Problem / mex】 题解
  17. 那些年,被我蠢哭了的php代码小错误~~~
  18. mysql 查询条件 默认不区分大小写
  19. lightoj 1099【dijkstra/BFS】
  20. HTML5: 本地缓存

热门文章

  1. 解决新建maven项目速度慢的问题
  2. [干货来袭]C#7.0新特性(VS2017可用)
  3. 基于Selenium2+Java的UI自动化(8)- 显式等待和隐式等待
  4. laravel初次学习总结及一些细节
  5. 1634: [Usaco2007 Jan]Protecting the Flowers 护花
  6. Solr commit 策略测试
  7. DapperPoco -- 基于Dapper的、轻量级的、高性能的、简单的、灵活的ORM框架
  8. struct和typedef struct在c++中的用法
  9. C++标准库之vector(各函数及其使用全)
  10. cuda内存总结