? 在spring 2.0 中,增加了自定義xml標(biāo)記這一重大的功能。下面主要看一下spring 2.0實(shí)現(xiàn)這一功能的主要相關(guān)類:
?
NamespaceHandlerResolver(接口)??? 由DefaultBeanDefinitionDocumentReader使用,用于定位NamespaceHandler,指定特定的命名空間uri
?? 實(shí)現(xiàn)類:
??
DefaultNamespaceHandlerResolver??
?? 通過map 保存所有的對應(yīng)關(guān)系
?? 默認(rèn)使用spring.handlers文件來保存所有的handlers
?? 可以定義其他的location 如:
?? String location = "org/springframework/beans/factory/xml/support/customNamespace.properties";
?? NamespaceHandlerResolver resolver = new DefaultNamespaceHandlerResolver(getClass().getClassLoader(), location);
??
??
NamespaceHandler(接口)
???
????? 基礎(chǔ)接口,用于DefaultBeanDefinitionDocumentReader處理自定義命名空間。
????? 方法:
???? ??? void init();
???????? 由DefaultBeanDefinitionDocumentReader調(diào)用在構(gòu)造完后但在解析自定義元素前。
?
?? ????? BeanDefinition parse(Element element, ParserContext parserContext);
???????? 解析指定的元素。
?
?? ? ? ? BeanDefinitionHolder decorate(Node element,
??????????????????????????????????? BeanDefinitionHolder definition,
??????????????????????????????????? ParserContext parserContext);
???????? 執(zhí)行相應(yīng)的修飾。
?? 實(shí)現(xiàn)類:
????
????
NamespaceHandlerSupport(抽象類)??
?? 主要的三個方法:
?? 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
?? 實(shí)際的操作由具體的BeanDefinitionDecorator 或者BeanDefinitionParser 執(zhí)行
?
BeanDefinitionDecorator(接口)?? 裝飾相關(guān)的自定義屬性。
???? AbstractInterceptorDrivenBeanDefinitionDecorator
????????? 用于注冊相應(yīng)的Interceptor bean 定義,使用aop代理
?
其他類:
??? PluggableSchemaResolver,用于自定義相關(guān)的schema,默認(rèn)的schema 保存于spring.schemas文件中
??? 可以通過覆蓋resolveEntity方法來裝載相應(yīng)的自定義xsd文件
? 主要的執(zhí)行類:
? ? XmlBeanDefinitionReader
?
??? 用于處理相應(yīng)的讀取工作,其實(shí)主要的工作委派給BeanDefinitionDocumentReader
? 實(shí)際的類,就介紹到這,下一節(jié)通過實(shí)例來說明如何定義自定義xml 元素
posted on 2006-10-27 18:08
布衣郎 閱讀(755)
評論(0) 編輯 收藏 所屬分類:
spring