phpcms 多语言网站,wordpress亲子主题,施工企业如何获取竞争优势,搜狗官方网站2019独角兽企业重金招聘Python工程师标准 ##mvc.xml中可配置的元素## 既然是xml,当然是要遵循schema的规定. 那么schema文件在哪呢? 定位方法就是解开这个jar文件,找到META-INF/spring.schema文件,这是个文本文件,里面包含了namespace以及其对应的xsd文件的位置… 2019独角兽企业重金招聘Python工程师标准 ##mvc.xml中可配置的元素## 既然是xml,当然是要遵循schema的规定. 那么schema文件在哪呢? 定位方法就是解开这个jar文件,找到META-INF/spring.schema文件,这是个文本文件,里面包含了namespace以及其对应的xsd文件的位置. 由此得出:mvc的schema是spring-mvc-{version}.xsd,位于spring-webmvc-{version}.jar文件的org.springframework.web.servlet.config包中. 该schema的一级标签有5个(annotation-driven,resources,default-servlet-handler,interceptors,view-controller).至于每个element的含义及下属标签的配置,后面有时间在讲,此处跳过. ##解析配置## 前面的文章讲到过spring是如何解析不同namespace的xml文件的.这里我们就以mvc为例再过一遍. 依然是解压jar文件,这次去找META-INF/spring.handlers,这也是个文本文件.里面告诉我们xml中mvc专属标签的处理是org.springframework.web.servlet.config.MvcNamespaceHandler干的. 我们看一下这个类:此类中就一个init方法,里面指出了上一章中提到的5个一级标签分别对应的处理器类. public void init() {registerBeanDefinitionParser(annotation-driven, new AnnotationDrivenBeanDefinitionParser());registerBeanDefinitionParser(default-servlet-handler, new DefaultServletHandlerBeanDefinitionParser());registerBeanDefinitionParser(interceptors, new InterceptorsBeanDefinitionParser());registerBeanDefinitionParser(resources, new ResourcesBeanDefinitionParser());registerBeanDefinitionParser(view-controller, new ViewControllerBeanDefinitionParser());
}这几个类中就涉及了我们比较熟悉的.HandlerMapping,HandlerAdapter,HandlerInterceptor,HandlerMethodArgumentResolver等. 处理器中新建了这些类的BeanDefinition.BeanDefinition也就包含了默认的properties的设置.比如说默认的拦截器,默认的参数解析器,默认的类型转换器等. 然后把这些BeanDefinition注册到Bean容器中. ##君在何处## spring mvc的执行过程是从DispatcherServlet开始的.这个类在初始化的时候会从bean容器中把上面注册的BeanDefinition实例化出来,放到类变量里面备用. protected void initStrategies(ApplicationContext context) {initMultipartResolver(context);initLocaleResolver(context);initThemeResolver(context);initHandlerMappings(context);initHandlerAdapters(context);initHandlerExceptionResolvers(context);initRequestToViewNameTranslator(context);initViewResolvers(context);initFlashMapManager(context);
}转载于:https://my.oschina.net/huanger/blog/361111