001
002 /*
003 * Copyright (C) 2011 Archie L. Cobbs. All rights reserved.
004 *
005 * $Id: AbstractBeanDefinitionParser.java 130 2011-09-17 14:21:00Z archie.cobbs $
006 */
007
008 package org.dellroad.stuff.spring;
009
010 import org.springframework.beans.factory.support.AbstractBeanDefinition;
011 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
012 import org.springframework.beans.factory.xml.BeanDefinitionParserDelegate;
013 import org.springframework.beans.factory.xml.ParserContext;
014 import org.w3c.dom.Element;
015
016 /**
017 * Support superclass for {@link org.springframework.beans.factory.xml.BeanDefinitionParser} implementations.
018 */
019 public abstract class AbstractBeanDefinitionParser extends org.springframework.beans.factory.xml.AbstractBeanDefinitionParser {
020
021 /**
022 * Create a new bean definition.
023 *
024 * @param beanClass bean type
025 * @param element the element that the new bean definition is associated with
026 * @param parserContext parser context
027 */
028 protected AbstractBeanDefinition createBeanDefinition(Class<?> beanClass, Element element, ParserContext parserContext) {
029 BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition();
030 builder.getRawBeanDefinition().setBeanClass(beanClass);
031 builder.getRawBeanDefinition().setSource(parserContext.extractSource(element));
032 if (parserContext.isNested())
033 builder.setScope(parserContext.getContainingBeanDefinition().getScope());
034 if (parserContext.isDefaultLazyInit())
035 builder.setLazyInit(true);
036 return builder.getBeanDefinition();
037 }
038
039 /**
040 * Parse the standard Spring bean attributes such as {@code scope}, {@code depends-on}, {@code abstract}, etc.
041 *
042 * @param beanDefinition bean definition to modify
043 * @param element the XML element on which to look for attributes
044 * @param parserContext parser context
045 */
046 protected void parseStandardAttributes(AbstractBeanDefinition beanDefinition, Element element, ParserContext parserContext) {
047 BeanDefinitionParserDelegate delegate = new BeanDefinitionParserDelegate(parserContext.getReaderContext());
048 delegate.parseBeanDefinitionAttributes(element, "", null, beanDefinition);
049 }
050
051 /**
052 * Report an error and throw an exception.
053 */
054 protected void error(Element element, ParserContext parserContext, String message) {
055 parserContext.getReaderContext().fatal(message, parserContext.extractSource(element));
056 }
057 }
058