springmvc源码解析MvcNamespaceHandler之<mvc:interceptors>

 

说在前面

本次主要介绍springmvc配置解析。

 

springmvc配置解析

本次介绍MvcNamespaceHandler。

进入到这个方法org.springframework.web.servlet.config.InterceptorsBeanDefinitionParser#parse

@Override
   public BeanDefinition parse(Element element, ParserContext parserContext) {
      CompositeComponentDefinition compDefinition = new CompositeComponentDefinition(element.getTagName(), parserContext.extractSource(element));
      parserContext.pushContainingComponent(compDefinition);
      RuntimeBeanReference pathMatcherRef = null;
//    解析路径适配器
      if (element.hasAttribute("path-matcher")) {
         pathMatcherRef = new RuntimeBeanReference(element.getAttribute("path-matcher"));
      }

      List<Element> interceptors = DomUtils.getChildElementsByTagName(element, "bean", "ref", "interceptor");
      for (Element interceptor : interceptors) {
         RootBeanDefinition mappedInterceptorDef = new RootBeanDefinition(MappedInterceptor.class);
         mappedInterceptorDef.setSource(parserContext.extractSource(interceptor));
         mappedInterceptorDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
         ManagedList<String> includePatterns = null;
         ManagedList<String> excludePatterns = null;
         Object interceptorBean;
//       注册拦截器bean定义
         if ("interceptor".equals(interceptor.getLocalName())) {
//          包含路径的适配器 ->
            includePatterns = getIncludePatterns(interceptor, "mapping");
//          包含路径的映射路径 ->
            excludePatterns = getIncludePatterns(interceptor, "exclude-mapping");
            Element beanElem = DomUtils.getChildElementsByTagName(interceptor, "bean", "ref").get(0);
            interceptorBean = parserContext.getDelegate().parsePropertySubElement(beanElem, null);
         }
         else {
            interceptorBean = parserContext.getDelegate().parsePropertySubElement(interceptor, null);
         }
         mappedInterceptorDef.getConstructorArgumentValues().addIndexedArgumentValue(0, includePatterns);
         mappedInterceptorDef.getConstructorArgumentValues().addIndexedArgumentValue(1, excludePatterns);
         mappedInterceptorDef.getConstructorArgumentValues().addIndexedArgumentValue(2, interceptorBean);
         if (pathMatcherRef != null) {
            mappedInterceptorDef.getPropertyValues().add("pathMatcher", pathMatcherRef);
         }

         String beanName = parserContext.getReaderContext().registerWithGeneratedName(mappedInterceptorDef);
         parserContext.registerComponent(new BeanComponentDefinition(mappedInterceptorDef, beanName));
      }

      parserContext.popAndRegisterContainingComponent();
      return null;
   }

 

说到最后

本次源码解析仅代表个人观点,仅供参考。

转载于:https://my.oschina.net/u/3775437/blog/3023348

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值