SpringMVC核心配置文件

Spring支持2中不同类型的数据定义模式,对SpringMVC中的组件进行声明,指定组件的行为方式

  • 基于Traditional XML的配置定义模式
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">    
       <property name="prefix" value="/" />    
       <property name="suffix" value=".jsp" />    
</bean> 
  • 基于Schema-based XML的配置定义模式

<mvc:annotation-driven />

引入Schema-based XML是为了对Traditional的XML配置形式进行简化。通过Schema的定义,把一些原本需要通过几个bean的定义或者复杂的bean的组合定义的配置形式,用另外一种简单而可读的配置形式呈现出来。 Schema-based XML可以极大改善配置文件的可读性并且缩小配置文件的规模。而实际上,Schema-based XML的引入,是把原本静态的配置动态化、过程化。
Schema-based XML相比较Traditional XML至少有三个方面的优势:

  • namespace —— 拥有很明确的逻辑分类
  • element —— 拥有很明确的过程语义
  • attributes —— 拥有很简明的配置选项

这段配置想要表达的意思,就是在mvc的空间内实现Annotation驱动的配置方式。其中,mvc表示配置的有效范围,annotation-driven则表达了一个动态的过程,实际的逻辑含义是:整个SpringMVC的实现是基于Annotation模式,请为我注册相关的行为模式。

一个Schema-based XML有两大构成要素:过程实现和配置定义。
1)所谓过程实现就是配置文件背后逻辑的实现过程,由2个接口完成:
NamespaceHandler —— 对Schema定义中namespace的逻辑处理接口
BeanDefinitionParser —— 对Schema定义中element的逻辑处理接口
NamespaceHandler是入口,它去调用BeanDefinitionParser的实现以实现各个逻辑。
如MvcNamespaceHandler中

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());  
}

ResourcesBeanDefinitionParser就是的实现,这样我们不用写bean,可以通过编程(写ResourcesBeanDefinitionParser类)的方式对Bean进行注册,所以大大简化了XML配置。
2)所谓的配置定义,就是通过一些配置文件,将上述的过程实现类串联起来,从而完成整个Schema-based XML的定义,有2部分组成:

  • Schema定义 —— 一个xsd文件,描述整个Schema空间中element和attribute的定义
  • 注册配置文件 —— 由META-INF/spring.handlers和META-INF/spring.schemas构成,用以注册Schema和Handler

Schema定义(xsd文件)如 http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd ,这个文件被同步发布于网上,但是你发现在无法上网的环境下还是能运行Spring,因为这个XSD文件在spring-webmvc下有备份

<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:mvc="http://www.springframework.org/schema/mvc"  
       xmlns:context="http://www.springframework.org/schema/context"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       xsi:schemaLocation="http://www.springframework.org/schema/beans  
            http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
            http://www.springframework.org/schema/context   
            http://www.springframework.org/schema/context/spring-context-3.1.xsd  
            http://www.springframework.org/schema/mvc  
            http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd"> 

xsi:schemaLocation声明就是用于指定映射于本地的XSD文件,使Spring自动查找本地的缓存来进行schema的寻址。
在初始化的时候有一个log日志,org.springframework.beans.factory.support.DefaultListableBeanFactory@495c998a: defining beans,其下面就是组件注册的细节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值