2021-08-30

最近在看spring源码 自定义解析标签部分,想到了一个问题,名命空间是如何出初始化的,于是查看源码,
在这里插入图片描述
获取名命空间处理解析器
在这里插入图片描述
进入构造函数,此时,handlerMappings为空,
在这里插入图片描述

在断点到namespaceHandlerResolver,的时候,发现DefaultNamespaceHandlerResolver对应的handlerMappings存在了值,

namespaceHandlerResolver
在使用DefaultNamespaceHandlerResolver构造函数的时候,并未发现初始化handleMapping
handlerMappings有值了

很奇怪啊,构造函数的时候,明明没有初始化handlerMapping

那么handlerMapping到底是什么时候初始化的呢?

在观察DefaultNamespaceHandlerResolver中,有段代码值得我们去注意:getHandlerMapping方法,此方法是将HandlerMapping初始化的代码,肯定是哪里去调用了该方法,此方法,进行了双重校验,并加锁,

在这里插入图片描述
我们此时将断点打到第163行和173行可以进入这个方法,(实验证明,断点在154,进不了这个方法)

因为handlerMapping为私有参数,getHandlerMapping私有方法,所以,外部类是调用不到该参数的,发现,DefaultNamespaceHandlerResolver 在toString方法中,调用了getHandlerMapping方法,

那么toString是什么调用的呢???

查询网上其他文章得知:在debug模式的时候,构造函数执行完毕后IDE调用了该对象的toString()方法。
注:此处之所以开始未能发现何时初始化了handlerMappings,是因为IntelliJ IDEA自动调用的方法是不会进入相应断点的。其实可以测试下,如果中间没有断点的情况下,handlerMappings就没有值。

ok,到此为止,

获取处理器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值