• SpringMVC之RequestMappingHandlerMapping


    <mvc:annotation-driven content-negotiation-manager="" enable-matrix-variables="true"></mvc:annotation-driven>

            RuntimeBeanReference contentNegotiationManager = getContentNegotiationManager(element, source, parserContext);
    
            RootBeanDefinition handlerMappingDef = new RootBeanDefinition(RequestMappingHandlerMapping.class);
            handlerMappingDef.setSource(source);
            handlerMappingDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
            handlerMappingDef.getPropertyValues().add("order", 0);
            handlerMappingDef.getPropertyValues().add("contentNegotiationManager", contentNegotiationManager);
    
            if (element.hasAttribute("enable-matrix-variables")) {
                Boolean enableMatrixVariables = Boolean.valueOf(element.getAttribute("enable-matrix-variables"));
                handlerMappingDef.getPropertyValues().add("removeSemicolonContent", !enableMatrixVariables);
            }
         //兼容之前版本
    else if (element.hasAttribute("enableMatrixVariables")) { Boolean enableMatrixVariables = Boolean.valueOf(element.getAttribute("enableMatrixVariables")); handlerMappingDef.getPropertyValues().add("removeSemicolonContent", !enableMatrixVariables); } configurePathMatchingProperties(handlerMappingDef, element, parserContext); readerContext.getRegistry().registerBeanDefinition(HANDLER_MAPPING_BEAN_NAME , handlerMappingDef); RuntimeBeanReference corsConfigurationsRef = MvcNamespaceUtils.registerCorsConfigurations(null, parserContext, source); handlerMappingDef.getPropertyValues().add("corsConfigurations", corsConfigurationsRef);
        private RuntimeBeanReference getContentNegotiationManager(Element element, Object source,
                ParserContext parserContext) {
    
            RuntimeBeanReference beanRef;
            if (element.hasAttribute("content-negotiation-manager")) {
                String name = element.getAttribute("content-negotiation-manager");
                beanRef = new RuntimeBeanReference(name);
            }
            else {
                RootBeanDefinition factoryBeanDef = new RootBeanDefinition(ContentNegotiationManagerFactoryBean.class);
                factoryBeanDef.setSource(source);
                factoryBeanDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
                factoryBeanDef.getPropertyValues().add("mediaTypes", getDefaultMediaTypes());
    
                String name = CONTENT_NEGOTIATION_MANAGER_BEAN_NAME;
                parserContext.getReaderContext().getRegistry().registerBeanDefinition(name , factoryBeanDef);
                parserContext.registerComponent(new BeanComponentDefinition(factoryBeanDef, name));
                beanRef = new RuntimeBeanReference(name);
            }
            return beanRef;
        }
        private Properties getDefaultMediaTypes() {
            Properties props = new Properties();
            if (romePresent) {
                props.put("atom", MediaType.APPLICATION_ATOM_XML_VALUE);
                props.put("rss", MediaType.APPLICATION_RSS_XML_VALUE);
            }
            if (jaxb2Present || jackson2XmlPresent) {
                props.put("xml", MediaType.APPLICATION_XML_VALUE);
            }
            if (jackson2Present || gsonPresent) {
                props.put("json", MediaType.APPLICATION_JSON_VALUE);
            }
            return props;
        }
        private void configurePathMatchingProperties(RootBeanDefinition handlerMappingDef, Element element,
                ParserContext parserContext) {
    
            Element pathMatchingElement = DomUtils.getChildElementByTagName(element, "path-matching");
            if (pathMatchingElement != null) {
                Object source = parserContext.extractSource(element);
                if (pathMatchingElement.hasAttribute("suffix-pattern")) {
                    Boolean useSuffixPatternMatch = Boolean.valueOf(pathMatchingElement.getAttribute("suffix-pattern"));
                    handlerMappingDef.getPropertyValues().add("useSuffixPatternMatch", useSuffixPatternMatch);
                }
                if (pathMatchingElement.hasAttribute("trailing-slash")) {
                    Boolean useTrailingSlashMatch = Boolean.valueOf(pathMatchingElement.getAttribute("trailing-slash"));
                    handlerMappingDef.getPropertyValues().add("useTrailingSlashMatch", useTrailingSlashMatch);
                }
                if (pathMatchingElement.hasAttribute("registered-suffixes-only")) {
                    Boolean useRegisteredSuffixPatternMatch = Boolean.valueOf(pathMatchingElement.getAttribute("registered-suffixes-only"));
                    handlerMappingDef.getPropertyValues().add("useRegisteredSuffixPatternMatch", useRegisteredSuffixPatternMatch);
                }
                RuntimeBeanReference pathHelperRef = null;
                if (pathMatchingElement.hasAttribute("path-helper")) {
                    pathHelperRef = new RuntimeBeanReference(pathMatchingElement.getAttribute("path-helper"));
                }
                pathHelperRef = MvcNamespaceUtils.registerUrlPathHelper(pathHelperRef, parserContext, source);
                handlerMappingDef.getPropertyValues().add("urlPathHelper", pathHelperRef);
    
                RuntimeBeanReference pathMatcherRef = null;
                if (pathMatchingElement.hasAttribute("path-matcher")) {
                    pathMatcherRef = new RuntimeBeanReference(pathMatchingElement.getAttribute("path-matcher"));
                }
                pathMatcherRef = MvcNamespaceUtils.registerPathMatcher(pathMatcherRef, parserContext, source);
                handlerMappingDef.getPropertyValues().add("pathMatcher", pathMatcherRef);
            }
        }
        public static RuntimeBeanReference registerCorsConfigurations(
                Map<String, CorsConfiguration> corsConfigurations, ParserContext parserContext, Object source) {
    
            if (!parserContext.getRegistry().containsBeanDefinition(CORS_CONFIGURATION_BEAN_NAME)) {
                RootBeanDefinition corsConfigurationsDef = new RootBeanDefinition(LinkedHashMap.class);
                corsConfigurationsDef.setSource(source);
                corsConfigurationsDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
                if (corsConfigurations != null) {
                    corsConfigurationsDef.getConstructorArgumentValues().addIndexedArgumentValue(0, corsConfigurations);
                }
                parserContext.getReaderContext().getRegistry().registerBeanDefinition(CORS_CONFIGURATION_BEAN_NAME, corsConfigurationsDef);
                parserContext.registerComponent(new BeanComponentDefinition(corsConfigurationsDef, CORS_CONFIGURATION_BEAN_NAME));
            }
            else if (corsConfigurations != null) {
                BeanDefinition corsConfigurationsDef = parserContext.getRegistry().getBeanDefinition(CORS_CONFIGURATION_BEAN_NAME);
                corsConfigurationsDef.getConstructorArgumentValues().addIndexedArgumentValue(0, corsConfigurations);
            }
            return new RuntimeBeanReference(CORS_CONFIGURATION_BEAN_NAME);
        }
  • 相关阅读:
    授权中的with admin option和with grant option
    CentOS6.2(64bit)下mysql5.6.16主从同步配置
    linux zip命令
    从模版中找到控件的方法和找到样式的方法
    WPF 在事件中绑定命令(不可以在模版中绑定命令)
    WPF: ShowDialog() 切换到其他应用窗口后,再切换回来无法让子窗口总在最上方
    TreeViewItem实现整行选中 (两种用法)
    BitmapImage 读取内存流和显示图片
    IsKeyboardFocused -- 键盘焦点
    WPF中的imagesource 和内存图片的处理
  • 原文地址:https://www.cnblogs.com/zby9527/p/8965563.html
Copyright © 2020-2023  润新知