Configuration class final

Configuration annotation for configuration classes

This annotation marks a class as a source of pod definitions.

Example Usage:

@Configuration()
class AppConfig {
  @Pod()
  DatabaseConnection databaseConnection() {
    return DatabaseConnection(
      host: 'localhost',
      port: 5432,
      database: 'myapp',
    );
  }
  
  @Pod()
  @Primary()
  EmailService emailService() {
    return SmtpEmailService();
  }
  
  @Pod('alternativeEmailService')
  EmailService alternativeEmailService() {
    return SendGridEmailService();
  }
}

Designates a class as a manual configuration source for defining pods.

The @Configuration annotation is used to explicitly declare a class that provides pod definitions using annotated methods (e.g., with @Pod()). These pods are registered into the application's DI container and can be injected throughout the application.

Unlike @AutoConfiguration, which is discovered automatically (e.g., through scanning), classes annotated with @Configuration must be explicitly imported and included in the application setup.


🧩 Purpose:

  • Centralizes pod creation logic in a dedicated configuration class.
  • Encourages clean separation between configuration and business logic.
  • Supports advanced setup such as conditional pods, external parameters, etc.

πŸ“¦ Typical Use Cases:

  • Registering pods that require constructor parameters or factory logic
  • Defining external service clients or adapters
  • Grouping related configuration logic (e.g., security, database)

πŸ§ͺ Example:

@Configuration()
class AppConfig {
  @Pod()
  AppService appService() => AppService();

  @Pod()
  Logger logger() => Logger(level: 'debug');
}

🧱 Pod Method Requirements:

  • Must be annotated with @Pod()
  • Must return the object to be registered in the container
  • May return singletons or scoped instances depending on framework support

πŸ”§ Usage Notes:

  • Unlike @Component, the annotated class is not the pod itself, but a pod provider.
  • @Configuration is itself a @Component, meaning it is also managed by the container.
  • You may inject dependencies into the configuration class via its constructor.
@Configuration()
class WebConfig {
  final AppProperties props;

  WebConfig(this.props);

  @Pod()
  Client httpClient() => Client(baseUrl: props.apiUrl);
}

πŸ†š Configuration vs AutoConfiguration:

Feature @Configuration @AutoConfiguration
Manual Import Needed βœ… Yes ❌ No (auto-scanned)
Recommended Use App-specific config Library/framework setup
Lifecycle Control Full control Declarative

πŸ› οΈ Internals:

  • Frameworks may scan @Configuration methods at bootstrap to build the pod graph.
  • The class may also participate in lifecycle hooks (e.g., @PostConstruct, @PreDestroy)

🎯 Target:

  • Can only be applied to class declarations
@Configuration()
class CacheConfig {
  @Pod()
  CacheManager cache() => CacheManager();
}

  • @Pod – defines individual pods inside a configuration class
  • @Component – base annotation for injectable classes
  • @AutoConfiguration – auto-discovered configuration class
  • @Import – (planned) to import other configuration classes

Annotations
  • @Component()
  • @Target.new({TargetKind.classType})

Constructors

Configuration([String? value, bool proxyPodMethods = true, ScopeMetadataResolver scopeResolver = const AnnotatedScopeMetadataResolver()])
Configuration annotation for configuration classes
const

Properties

hashCode β†’ int
The hash code for this object.
no setterinherited
proxyPodMethods β†’ bool
Specify whether @Pod methods should get proxied in order to enforce pod lifecycle behavior.
finalinherited
runtimeType β†’ Type
A representation of the runtime type of the object.
no setterinherited
scopeResolver β†’ ScopeMetadataResolver
Specify the scope metadata resolver to use for resolving scope metadata.
finalinherited
value β†’ String?
Optional configuration name
final

Methods

equalizedProperties() β†’ List<Object?>
Mixin-style contract for value-based equality, hashCode, and toString.
noSuchMethod(Invocation invocation) β†’ dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toString() β†’ String
A string representation of this object.
override

Operators

operator ==(Object other) β†’ bool
The equality operator.
inherited