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
`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)`