AnnotationConfigWebContextLoader (Spring Framework 3.2.1.RELEASE API)
Date: 2013-01-24

org.springframework.test.context.web

## Class AnnotationConfigWebContextLoader

- java.lang.Object
- - org.springframework.test.context.support.AbstractContextLoader
  - - org.springframework.test.context.web.AbstractGenericWebContextLoader
    - - org.springframework.test.context.web.AnnotationConfigWebContextLoader

- All Implemented Interfaces:
    ContextLoader, SmartContextLoader

      public class AnnotationConfigWebContextLoader
      extends AbstractGenericWebContextLoader

  Concrete implementation of `AbstractGenericWebContextLoader` that loads bean definitions from annotated classes.

  See the Javadoc for `@ContextConfiguration` for a definition of annotated class.

  Note: `AnnotationConfigWebContextLoader` supports annotated classes rather than the String-based resource locations defined by the legacy `ContextLoader` API. Thus, although `AnnotationConfigWebContextLoader` extends `AbstractGenericWebContextLoader`, `AnnotationConfigWebContextLoader` does not support any String-based methods defined by `AbstractContextLoader` or `AbstractGenericWebContextLoader`. Consequently, `AnnotationConfigWebContextLoader` should chiefly be considered a `SmartContextLoader` rather than a `ContextLoader`.

  Since:
    3.2
  Author:
    Sam Brannen
  See Also:
    `processContextConfiguration(ContextConfigurationAttributes)`, `detectDefaultConfigurationClasses(Class)`, `loadBeanDefinitions(GenericWebApplicationContext, WebMergedContextConfiguration)`

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `AnnotationConfigWebContextLoader()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected Class<?>[]` | `detectDefaultConfigurationClasses(Class<?> declaringClass)` Detect the default configuration classes for the supplied test class.
    `protected String[]` | `generateDefaultLocations(Class<?> clazz)` `AnnotationConfigWebContextLoader` should be used as a `SmartContextLoader`, not as a legacy `ContextLoader`.
    `protected String` | `getResourceSuffix()` `AnnotationConfigWebContextLoader` should be used as a `SmartContextLoader`, not as a legacy `ContextLoader`.
    `protected void` | `loadBeanDefinitions(GenericWebApplicationContext context, WebMergedContextConfiguration webMergedConfig)` Register classes in the supplied context from the classes in the supplied `WebMergedContextConfiguration`.
    `protected String[]` | `modifyLocations(Class<?> clazz, String... locations)` `AnnotationConfigWebContextLoader` should be used as a `SmartContextLoader`, not as a legacy `ContextLoader`.
    `void` | `processContextConfiguration(ContextConfigurationAttributes configAttributes)` Process annotated classes in the supplied `ContextConfigurationAttributes`.

    - ### Methods inherited from class org.springframework.test.context.web.AbstractGenericWebContextLoader

      `configureWebResources, customizeBeanFactory, customizeContext, loadContext, loadContext`

    - ### Methods inherited from class org.springframework.test.context.support.AbstractContextLoader

      `isGenerateDefaultLocations, prepareContext, processLocations`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### AnnotationConfigWebContextLoader

          public AnnotationConfigWebContextLoader()

  - ### Method Detail

    - #### processContextConfiguration

          public void processContextConfiguration(ContextConfigurationAttributes configAttributes)

      Process annotated classes in the supplied `ContextConfigurationAttributes`.

      If the annotated classes are `null` or empty and `AbstractContextLoader.isGenerateDefaultLocations()` returns `true`, this `SmartContextLoader` will attempt to detect default configuration classes. If defaults are detected they will be set in the supplied configuration attributes. Otherwise, properties in the supplied configuration attributes will not be modified.

      Specified by:
        `processContextConfiguration` in interface `SmartContextLoader`
      Overrides:
        `processContextConfiguration` in class `AbstractContextLoader`
      Parameters:
        `configAttributes` - the context configuration attributes to process
      See Also:
        `SmartContextLoader.processContextConfiguration(ContextConfigurationAttributes)`, `AbstractContextLoader.isGenerateDefaultLocations()`, `detectDefaultConfigurationClasses(Class)`

    - #### detectDefaultConfigurationClasses

          protected Class<?>[] detectDefaultConfigurationClasses(Class<?> declaringClass)

      Detect the default configuration classes for the supplied test class.

      The default implementation simply delegates to `AnnotationConfigContextLoaderUtils.detectDefaultConfigurationClasses(Class)`.

      Parameters:
        `declaringClass` - the test class that declared `@ContextConfiguration`
      Returns:
        an array of default configuration classes, potentially empty but never `null`
      See Also:
        `AnnotationConfigContextLoaderUtils`

    - #### modifyLocations

          protected String[] modifyLocations(Class<?> clazz,
                                 String... locations)

      `AnnotationConfigWebContextLoader` should be used as a `SmartContextLoader`, not as a legacy `ContextLoader`. Consequently, this method is not supported.
      Overrides:
        `modifyLocations` in class `AbstractContextLoader`
      Parameters:
        `clazz` - the class with which the locations are associated
        `locations` - the resource locations to be modified
      Returns:
        an array of modified application context resource locations
      Throws:
        `UnsupportedOperationException`
      See Also:
        `AbstractContextLoader.modifyLocations(java.lang.Class<?>, java.lang.String...)`

    - #### generateDefaultLocations

          protected String[] generateDefaultLocations(Class<?> clazz)

      `AnnotationConfigWebContextLoader` should be used as a `SmartContextLoader`, not as a legacy `ContextLoader`. Consequently, this method is not supported.
      Overrides:
        `generateDefaultLocations` in class `AbstractContextLoader`
      Parameters:
        `clazz` - the class for which the default locations are to be generated
      Returns:
        an array of default application context resource locations
      Throws:
        `UnsupportedOperationException`
      See Also:
        `AbstractContextLoader.generateDefaultLocations(java.lang.Class<?>)`

    - #### getResourceSuffix

          protected String getResourceSuffix()

      `AnnotationConfigWebContextLoader` should be used as a `SmartContextLoader`, not as a legacy `ContextLoader`. Consequently, this method is not supported.
      Specified by:
        `getResourceSuffix` in class `AbstractContextLoader`
      Returns:
        the resource suffix; should not be `null` or empty
      Throws:
        `UnsupportedOperationException`
      See Also:
        `AbstractContextLoader.getResourceSuffix()`

    - #### loadBeanDefinitions

          protected void loadBeanDefinitions(GenericWebApplicationContext context,
                                 WebMergedContextConfiguration webMergedConfig)

      Register classes in the supplied context from the classes in the supplied `WebMergedContextConfiguration`.

      Each class must represent an annotated class. An `AnnotatedBeanDefinitionReader` is used to register the appropriate bean definitions.

      Specified by:
        `loadBeanDefinitions` in class `AbstractGenericWebContextLoader`
      Parameters:
        `context` - the context in which the annotated classes should be registered
        `webMergedConfig` - the merged configuration from which the classes should be retrieved
      See Also:
        `AbstractGenericWebContextLoader.loadBeanDefinitions(org.springframework.web.context.support.GenericWebApplicationContext, org.springframework.test.context.web.WebMergedContextConfiguration)`