org.springframework.context.annotation
Class ConfigurationClassParser

java.lang.Object
  extended by org.springframework.context.annotation.ConfigurationClassParser

 class ConfigurationClassParser
extends java.lang.Object

Parses a Configuration class definition, populating a collection of ConfigurationClass objects (parsing a single Configuration class may result in any number of ConfigurationClass objects because one Configuration class may import another using the Import annotation).

This class helps separate the concern of parsing the structure of a Configuration class from the concern of registering BeanDefinition objects based on the content of that model.

This ASM-based implementation avoids reflection and eager class loading in order to interoperate effectively with lazy class loading in a Spring ApplicationContext.

Since:
3.0
Author:
Chris Beams, Juergen Hoeller
See Also:
ConfigurationClassBeanDefinitionReader

Nested Class Summary
private static class ConfigurationClassParser.CircularImportProblem
          Problem registered upon detection of a circular Import.
private static class ConfigurationClassParser.ImportStack
           
 
Field Summary
private  java.util.Set<ConfigurationClass> configurationClasses
           
private  java.util.Stack<ConfigurationClass> importStack
           
private  MetadataReaderFactory metadataReaderFactory
           
private  ProblemReporter problemReporter
           
 
Constructor Summary
ConfigurationClassParser(MetadataReaderFactory metadataReaderFactory, ProblemReporter problemReporter)
          Create a new ConfigurationClassParser instance that will be used to populate the set of configuration classes.
 
Method Summary
protected  void doProcessConfigurationClass(ConfigurationClass configClass, AnnotationMetadata metadata)
           
 java.util.Set<ConfigurationClass> getConfigurationClasses()
           
 void parse(java.lang.Class<?> clazz, java.lang.String beanName)
          Parse the specified @Configuration class.
 void parse(java.lang.String className, java.lang.String beanName)
          Parse the specified @Configuration class.
protected  void processConfigurationClass(ConfigurationClass configClass)
           
private  void processImport(ConfigurationClass configClass, java.lang.String[] classesToImport)
           
 void validate()
          Validate each ConfigurationClass object.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

metadataReaderFactory

private final MetadataReaderFactory metadataReaderFactory

problemReporter

private final ProblemReporter problemReporter

importStack

private final java.util.Stack<ConfigurationClass> importStack

configurationClasses

private final java.util.Set<ConfigurationClass> configurationClasses
Constructor Detail

ConfigurationClassParser

public ConfigurationClassParser(MetadataReaderFactory metadataReaderFactory,
                                ProblemReporter problemReporter)
Create a new ConfigurationClassParser instance that will be used to populate the set of configuration classes.

Method Detail

parse

public void parse(java.lang.String className,
                  java.lang.String beanName)
           throws java.io.IOException
Parse the specified @Configuration class.

Parameters:
className - the name of the class to parse
beanName - may be null, but if populated represents the bean id (assumes that this configuration class was configured via XML)
Throws:
java.io.IOException

parse

public void parse(java.lang.Class<?> clazz,
                  java.lang.String beanName)
           throws java.io.IOException
Parse the specified @Configuration class.

Parameters:
clazz - the Class to parse
beanName - may be null, but if populated represents the bean id (assumes that this configuration class was configured via XML)
Throws:
java.io.IOException

processConfigurationClass

protected void processConfigurationClass(ConfigurationClass configClass)
                                  throws java.io.IOException
Throws:
java.io.IOException

doProcessConfigurationClass

protected void doProcessConfigurationClass(ConfigurationClass configClass,
                                           AnnotationMetadata metadata)
                                    throws java.io.IOException
Throws:
java.io.IOException

processImport

private void processImport(ConfigurationClass configClass,
                           java.lang.String[] classesToImport)
                    throws java.io.IOException
Throws:
java.io.IOException

validate

public void validate()
Validate each ConfigurationClass object.

See Also:
ConfigurationClass.validate(org.springframework.beans.factory.parsing.ProblemReporter)

getConfigurationClasses

public java.util.Set<ConfigurationClass> getConfigurationClasses()