org.springframework.context.annotation

## Class AdviceModeImportSelector<A extends Annotation>

- java.lang.Object
- - org.springframework.context.annotation.AdviceModeImportSelector<A>

Type Parameters:
  `A` - Annotation containing AdviceMode attribute

All Implemented Interfaces:
  ImportSelector

Direct Known Subclasses:
  AsyncConfigurationSelector, CachingConfigurationSelector, TransactionManagementConfigurationSelector

    public abstract class AdviceModeImportSelector<A extends Annotation>
    extends Object
    implements ImportSelector

Convenient base class for `ImportSelector` implementations that select imports based on an `AdviceMode` value from an annotation (such as the `@Enable*` annotations).

Since:
  3.1
Author:
  Chris Beams

### Field Summary

Fields
`static String` `DEFAULT_ADVICE_MODE_ATTRIBUTE_NAME`

### Constructor Summary

Constructors
Constructor and Description
`AdviceModeImportSelector()`

### Method Summary

Methods
`protected String` `getAdviceModeAttributeName()` The name of the `AdviceMode` attribute for the annotation specified by the generic type `A`.
`protected abstract String[]` `selectImports(AdviceMode adviceMode)` Determine which classes should be imported based on the given `AdviceMode`.
`String[]` `selectImports(AnnotationMetadata importingClassMetadata)` Select and return the names of which class(es) should be imported based on the `AnnotationMetadata` of the importing @`Configuration` class.

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

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

### Field Detail

#### DEFAULT_ADVICE_MODE_ATTRIBUTE_NAME

    public static final String DEFAULT_ADVICE_MODE_ATTRIBUTE_NAME

See Also:
  Constant Field Values

### Constructor Detail

#### AdviceModeImportSelector

    public AdviceModeImportSelector()

### Method Detail

#### getAdviceModeAttributeName

    protected String getAdviceModeAttributeName()

The name of the `AdviceMode` attribute for the annotation specified by the generic type `A`. The default is "mode", but subclasses may override in order to customize.

#### selectImports

    public final String[] selectImports(AnnotationMetadata importingClassMetadata)

Select and return the names of which class(es) should be imported based on the `AnnotationMetadata` of the importing @`Configuration` class.

This implementation resolves the type of annotation from generic metadata and validates that (a) the annotation is in fact present on the importing `@Configuration` class and (b) that the given annotation has an advice mode attribute of type `AdviceMode`.

The `selectImports(AdviceMode)` method is then invoked, allowing the concrete implementation to choose imports in a safe and convenient fashion.

Specified by:
  `selectImports` in interface `ImportSelector`
Throws:
  `IllegalArgumentException` - if expected annotation `A` is not present on the importing `@Configuration` class or if `selectImports(AdviceMode)` returns `null`

#### selectImports

    protected abstract String[] selectImports(AdviceMode adviceMode)

Determine which classes should be imported based on the given `AdviceMode`.

Returning `null` from this method indicates that the `AdviceMode` could not be handled or was unknown and that an `IllegalArgumentException` should be thrown.

Parameters:
  `adviceMode` - the value of the advice mode attribute for the annotation specified via generics.
Returns:
  array containing classes to import; empty array if none, `null` if the given `AdviceMode` is unknown.