public interface NamespaceHandler
DefaultBeanDefinitionDocumentReader
for handling custom namespaces in a Spring XML configuration file.
Implementations are expected to return implementations of the
BeanDefinitionParser
interface for custom top-level tags and
implementations of the BeanDefinitionDecorator
interface for
custom nested tags.
The parser will call parse(org.w3c.dom.Element, org.springframework.beans.factory.xml.ParserContext)
when it encounters a custom tag
directly under the <beans>
tags and decorate(org.w3c.dom.Node, org.springframework.beans.factory.config.BeanDefinitionHolder, org.springframework.beans.factory.xml.ParserContext)
when
it encounters a custom tag directly under a <bean>
tag.
Developers writing their own custom element extensions typically will
not implement this interface directly, but rather make use of the provided
NamespaceHandlerSupport
class.
DefaultBeanDefinitionDocumentReader
,
NamespaceHandlerResolver
Modifier and Type | Method and Description |
---|---|
BeanDefinitionHolder |
decorate(Node source,
BeanDefinitionHolder definition,
ParserContext parserContext)
Parse the specified
Node and decorate the supplied
BeanDefinitionHolder , returning the decorated definition. |
void |
init()
Invoked by the
DefaultBeanDefinitionDocumentReader after
construction but before any custom elements are parsed. |
BeanDefinition |
parse(Element element,
ParserContext parserContext)
Parse the specified
Element and register any resulting
BeanDefinitions with the
BeanDefinitionRegistry
that is embedded in the supplied ParserContext . |
void init()
DefaultBeanDefinitionDocumentReader
after
construction but before any custom elements are parsed.BeanDefinition parse(Element element, ParserContext parserContext)
Element
and register any resulting
BeanDefinitions
with the
BeanDefinitionRegistry
that is embedded in the supplied ParserContext
.
Implementations should return the primary BeanDefinition
that results from the parse phase if they wish to be used nested
inside (for example) a <property>
tag.
Implementations may return null
if they will
not be used in a nested scenario.
element
- the element that is to be parsed into one or more BeanDefinitions
parserContext
- the object encapsulating the current state of the parsing processBeanDefinition
(can be null
as explained above)BeanDefinitionHolder decorate(Node source, BeanDefinitionHolder definition, ParserContext parserContext)
Node
and decorate the supplied
BeanDefinitionHolder
, returning the decorated definition.
The Node
may be either an Attr
or an
Element
, depending on whether a custom attribute or element
is being parsed.
Implementations may choose to return a completely new definition,
which will replace the original definition in the resulting
BeanFactory
.
The supplied ParserContext
can be used to register any
additional beans needed to support the main definition.
source
- the source element or attribute that is to be parseddefinition
- the current bean definitionparserContext
- the object encapsulating the current state of the parsing processnull
value is strictly speaking invalid, but will be leniently
treated like the case where the original bean definition gets returned.