Package 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:
  `AotContextLoader`, `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)`
  - `GenericXmlWebContextLoader`
  - `GenericGroovyXmlWebContextLoader`

## Constructor Summary

Constructors
Constructor
Description
`AnnotationConfigWebContextLoader()`

## Method Summary

Modifier and Type
Method
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(org.springframework.web.context.support.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`.
`protected void`
`validateMergedContextConfiguration(WebMergedContextConfiguration webMergedConfig)`
Ensure that the supplied `WebMergedContextConfiguration` does not contain `locations`.

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

`configureWebResources, createContext, customizeBeanFactory, customizeContext, loadContext, loadContext, loadContextForAotProcessing, loadContextForAotProcessing, loadContextForAotRuntime`

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

`customizeContext, getResourceSuffixes, isGenerateDefaultLocations, prepareContext, processLocations`

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

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

### Methods inherited from interface org.springframework.test.context.SmartContextLoader

`processLocations`

## Constructor Details

### AnnotationConfigWebContextLoader

public AnnotationConfigWebContextLoader()

## Method Details

### 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` - in this implementation
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` - in this implementation
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; never `null` or empty
Throws:
  `UnsupportedOperationException` - in this implementation
See Also:
  - `AbstractContextLoader.getResourceSuffix()`

### loadBeanDefinitions

protected void loadBeanDefinitions(org.springframework.web.context.support.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)`

### validateMergedContextConfiguration

protected void validateMergedContextConfiguration(WebMergedContextConfiguration webMergedConfig)
Ensure that the supplied `WebMergedContextConfiguration` does not contain `locations`.

Overrides:
  `validateMergedContextConfiguration` in class `AbstractGenericWebContextLoader`
Parameters:
  `webMergedConfig` - the merged configuration to validate
Since:
  4.0.4
See Also:
  - `AbstractGenericWebContextLoader.validateMergedContextConfiguration(org.springframework.test.context.web.WebMergedContextConfiguration)`