1 /* 2 * Copyright 2002-2006 the original author or authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package org.springframework.beans.factory.xml; 18 19 import org.w3c.dom.Element; 20 21 import org.springframework.beans.factory.config.BeanDefinition; 22 23 /** 24 * Interface used by the 25 * {@link org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader} to 26 * handle custom, top-level (directly under <code><beans></code>) tags. 27 * 28 * <p>Implementations are free to turn the metadata in the custom tag into as many 29 * {@link BeanDefinition BeanDefinitions} as required. 30 * 31 * <p>The parser locates a {@link BeanDefinitionParser} from the associated 32 * {@link NamespaceHandler} for the namespace in which the custom tag resides. 33 * 34 * @author Rob Harrop 35 * @since 2.0 36 * @see NamespaceHandler 37 * @see org.springframework.beans.factory.xml.BeanDefinitionDecorator 38 * @see AbstractBeanDefinitionParser 39 */ 40 public interface BeanDefinitionParser { 41 42 /** 43 * Parse the specified {@link Element} and register the resulting 44 * {@link BeanDefinition BeanDefinition(s)} with the 45 * {@link org.springframework.beans.factory.xml.ParserContext#getRegistry()} BeanDefinitionRegistry} 46 * embedded in the supplied {@link ParserContext}. 47 * <p>Implementations must return the primary {@link BeanDefinition} that results 48 * from the parse if they will ever be used in a nested fashion (for example as 49 * an inner tag in a <code><property/></code> tag). Implementations may return 50 * <code>null</code> if they will <strong>not</strong> be used in a nested fashion. 51 * @param element the element that is to be parsed into one or more {@link BeanDefinition BeanDefinitions} 52 * @param parserContext the object encapsulating the current state of the parsing process; 53 * provides access to a {@link org.springframework.beans.factory.support.BeanDefinitionRegistry} 54 * @return the primary {@link BeanDefinition} 55 */ 56 BeanDefinition parse(Element element, ParserContext parserContext); 57 58 } 59