在spring 2.0 中,增加了自定义xml标记这一重大的功能。下面主要看一下spring 2.0实现这一功能的主要相关类:
[b] NamespaceHandlerResolver(接口)[/b]
由DefaultBeanDefinitionDocumentReader使用,用于定位NamespaceHandler,指定特定的命名空间uri
实现类:
[b]DefaultNamespaceHandlerResolver[/b]
通过map 保存所有的对应关系
默认使用spring.handlers文件来保存所有的handlers
可以定义其他的location 如:
String location = "org/springframework/beans/factory/xml/support/customNamespace.properties";
NamespaceHandlerResolver resolver = new DefaultNamespaceHandlerResolver(getClass().getClassLoader(), location);
[b]NamespaceHandler(接口)[/b]
基础接口,用于DefaultBeanDefinitionDocumentReader处理自定义命名空间。
方法:
void init();
由DefaultBeanDefinitionDocumentReader调用在构造完后但在解析自定义元素前。
BeanDefinition parse(Element element, ParserContext parserContext);
解析指定的元素。
BeanDefinitionHolder decorate(Node element,
BeanDefinitionHolder definition,
ParserContext parserContext);
执行相应的修饰。
实现类:
[b] NamespaceHandlerSupport(抽象类)[/b]
主要的三个方法:
protected final void registerBeanDefinitionDecorator(
String elementName,
BeanDefinitionDecorator decorator)
注册decorator,通过element
protected final void registerBeanDefinitionDecoratorForAttribute(
String attributeName,
BeanDefinitionDecorator decorator)
注册decorator,通过attr
protected final void registerBeanDefinitionParser(
String elementName,
BeanDefinitionParser parser)
注册BeanDefinitionParser,通过element
实际的操作由具体的BeanDefinitionDecorator 或者BeanDefinitionParser 执行
[b] BeanDefinitionDecorator(接口)[/b]
装饰相关的自定义属性。
AbstractInterceptorDrivenBeanDefinitionDecorator
用于注册相应的Interceptor bean 定义,使用aop代理
[b]其他类:[/b]
PluggableSchemaResolver,用于自定义相关的schema,默认的schema 保存于spring.schemas文件中
可以通过覆盖resolveEntity方法来装载相应的自定义xsd文件
[b]主要的执行类:[/b]
XmlBeanDefinitionReader
用于处理相应的读取工作,其实主要的工作委派给BeanDefinitionDocumentReader
实际的类,就介绍到这,下一节通过实例来说明如何定义自定义xml 元素
[b] NamespaceHandlerResolver(接口)[/b]
由DefaultBeanDefinitionDocumentReader使用,用于定位NamespaceHandler,指定特定的命名空间uri
实现类:
[b]DefaultNamespaceHandlerResolver[/b]
通过map 保存所有的对应关系
默认使用spring.handlers文件来保存所有的handlers
可以定义其他的location 如:
String location = "org/springframework/beans/factory/xml/support/customNamespace.properties";
NamespaceHandlerResolver resolver = new DefaultNamespaceHandlerResolver(getClass().getClassLoader(), location);
[b]NamespaceHandler(接口)[/b]
基础接口,用于DefaultBeanDefinitionDocumentReader处理自定义命名空间。
方法:
void init();
由DefaultBeanDefinitionDocumentReader调用在构造完后但在解析自定义元素前。
BeanDefinition parse(Element element, ParserContext parserContext);
解析指定的元素。
BeanDefinitionHolder decorate(Node element,
BeanDefinitionHolder definition,
ParserContext parserContext);
执行相应的修饰。
实现类:
[b] NamespaceHandlerSupport(抽象类)[/b]
主要的三个方法:
protected final void registerBeanDefinitionDecorator(
String elementName,
BeanDefinitionDecorator decorator)
注册decorator,通过element
protected final void registerBeanDefinitionDecoratorForAttribute(
String attributeName,
BeanDefinitionDecorator decorator)
注册decorator,通过attr
protected final void registerBeanDefinitionParser(
String elementName,
BeanDefinitionParser parser)
注册BeanDefinitionParser,通过element
实际的操作由具体的BeanDefinitionDecorator 或者BeanDefinitionParser 执行
[b] BeanDefinitionDecorator(接口)[/b]
装饰相关的自定义属性。
AbstractInterceptorDrivenBeanDefinitionDecorator
用于注册相应的Interceptor bean 定义,使用aop代理
[b]其他类:[/b]
PluggableSchemaResolver,用于自定义相关的schema,默认的schema 保存于spring.schemas文件中
可以通过覆盖resolveEntity方法来装载相应的自定义xsd文件
[b]主要的执行类:[/b]
XmlBeanDefinitionReader
用于处理相应的读取工作,其实主要的工作委派给BeanDefinitionDocumentReader
实际的类,就介绍到这,下一节通过实例来说明如何定义自定义xml 元素