您的位置:首页 > 编程语言 > Java开发

SpringMVC核心配置文件

2016-04-13 20:18 639 查看
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,其下面就是组件注册的细节
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: