点关注,不迷路;持续更新Java相关技术及资讯!!!
公众号:Java大型网站架构(有免费学习资料)
工作中对于Spring MVC我们最常用的还是使用注解的方式,那么对于注解Spring MVC的如何处理的?
一、annotation-driven
在前面的介绍中,我们知道了HandlerMapping以及HandlerAdapter,那么annotation的是什么?
对于注解:
它对应的handlerMapping则是:
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
对应的HandlerAdapter则是:
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
对应的Handler则是:
org.springframework.web.method.HandlerMethod
这些没有配置在配置文件中,注解是怎么实现的?
来看下NamespaceHandler接口:
org.springframework.beans.factory.xml.NamespaceHandlerpackage org.springframework.beans.factory.xml;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.springframework.beans.factory.config.BeanDefinition;import org.springframework.beans.factory.config.BeanDefinitionHolder;public interface NamespaceHandler { void init(); BeanDefinition parse(Element element, ParserContext parserContext); BeanDefinitionHolder decorate(Node source, BeanDefinitionHolder definition, ParserContext parserContext);}
实现这个接口,则就可以动态的往ioc容器添加BeanDefinition,则就动态的添加了bean。
那么这个是在哪实现的呢?
来看下spring-webmvc包里面的spring.handlers
orgspringframeworkspring-webmvc4.3.8.RELEASEspring-webmvc-4.3.8.RELEASE.jar!META-INFspring.handlers
里面内容:
http://www.springframework.org/schema/mvc=org.springframework.web.servlet.config.MvcNamespaceHandler
点进去看一下 MvcNamespaceHandler 这个类:
package org.springframework.web.servlet.config;import org.springframework.beans.factory.xml.NamespaceHandlerSupport;public class MvcNamespaceHandler extends NamespaceHandlerSupport { public MvcNamespaceHandler() { } public void init() { this.registerBeanDefinitionParser("annotation-driven