华为网站的建设目标,分红盘网站开发多少钱,长沙做一个网站要多少钱,网页设计与实训布置课堂作业Spring自定义命名空间提供了一种很好的方式来简化用于描述Spring应用程序上下文的bean定义的xml文件。 这是一个相当古老的概念#xff0c;最初是在Spring 2.0中引入的#xff0c;但值得不时地进行审查。 考虑一种情况#xff0c;必须为没有自定义名称空间的Spring MVC应用程… Spring自定义命名空间提供了一种很好的方式来简化用于描述Spring应用程序上下文的bean定义的xml文件。 这是一个相当古老的概念最初是在Spring 2.0中引入的但值得不时地进行审查。 考虑一种情况必须为没有自定义名称空间的Spring MVC应用程序配置部分Bean –通常看起来像这样 bean namehandlerAdapter classorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterproperty namewebBindingInitializerbean classorg.springframework.web.bind.support.ConfigurableWebBindingInitializerproperty nameconversionService refconversionService/propertyproperty namevalidatorbean classorg.springframework.validation.beanvalidation.LocalValidatorFactoryBean//property/bean/propertyproperty namemessageConverterslistbean classorg.springframework.http.converter.ByteArrayHttpMessageConverter/beanbean classorg.springframework.http.converter.StringHttpMessageConverter/beanbean classorg.springframework.http.converter.ResourceHttpMessageConverter/beanbean classorg.springframework.http.converter.xml.SourceHttpMessageConverter/beanbean classorg.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter/beanbean classorg.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter/beanbean classorg.springframework.http.converter.json.MappingJacksonHttpMessageConverter/bean/list/property
/beanbean namehandlerMapping classorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMappingproperty nameuseSuffixPatternMatch valuefalse/property
/bean 在这里它配置了两个bean –一个用来处理MVC控制器流的handlerAdapter和一个用来保持请求URI与Controller方法之间的映射以处理请求的handlerMapping。 自定义命名空间“ http://www.springframework.org/schema/mvc”的相同配置变得非常简洁通常给其命名空间前缀为“ mvc” mvc:annotation-driven conversion-serviceconversionService
/mvc:annotation-driven 本质上这是使用Custom名称空间的优势–一种非常简洁的方式来描述Spring bean定义 那么自定义名称空间的工作原理是 Spring Reference文档中的这一节比我能更好地描述它– http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/extensible-xml.html#extensible-xml -模式。 概括起来自定义名称空间包含四个部分 模式 -描述自定义名称空间的结构-标记名称属性子标记等。 一个NamespaceHandler –为xml元素创建bean定义。 但是通常由Spring文档建议的更好的机制是扩展NameSpaceHandlerSupport并为Custom命名空间所支持的不同xml元素注册一系列BeanDefinitionParser 例如注解驱动的mvc命名空间的拦截器元素。 BeanDefinitionParser –为特定元素创建bean定义–在这里像mvcannotation-driven /这样的行将扩展为具有实际bean类名的更广泛的bean定义。 注册架构NamespaceHandler 用于Spring查找自定义名称空间的架构并找到将处理自定义名称空间的NamespaceHandler。 模式的注册是通过一个名为META-INF / spring.schemas的文件完成的这是Spring在类路径中找到模式而不是通过Web下载模式的一种好方法。 NamespaceHandler使用META-INF / spring.handlers文件进一步指定并包含将处理自定义名称空间的NamespaceHandler名称例如。 从Spring文档– http\://www.mycompany.com/schema/mynsorg.springframework.samples.xml.MyNamespaceHandler 绑在一起 有关自定义名称空间内部工作方式的信息可以很好地理解一些自定义namepsace标记的行为。 考虑一个标签来加载属性文件 context:property-placeholder locationclasspath*:META-INF/spring/database.properties/ 因此要查找property-placeholder元素在内部如何工作请首先找到spring.handlers文件。 由于property-placeholder位于上下文命名空间中因此spring.conler.s文件将出现在spring-context.jar文件中 文件指示NamespaceHandler为org.springframework.context.config.ContextNamespaceHandler ContextNameSpaceHandler注册了一个名为org.springframework.context.config.PropertyPlaceholderBeanDefinitionParser的BeanDefinition解析器。 此BeanDefinitionParser创建一个类定义为“ PropertyPlaceholderConfigurer ”的bean定义因此从本质上讲我们可以替换为 context:property-placeholder locationclasspath*:META-INF/spring/database.properties local-overridetrue properties-reflocalProperties/ 在过程中却变得简明扼要– bean classorg.springframework.beans.factory.config.PropertyPlaceholderConfigurerproperty namelocation valueclasspath*:META-INF/spring/database.properties/propertyproperty namelocalOverride valuetrue/propertyproperty namepropertiesref beanlocalProperties//property
/bean 但是这提供了一种很好的方式来理解Spring如何处理自定义命名空间下的某些细微差别。 参考 all和其他博客中来自JCG合作伙伴 Biju Kunjummen的Spring Custom Namespaces 。 翻译自: https://www.javacodegeeks.com/2012/07/spring-custom-namespaces.html