cdi
CDI Module
Gestalt provides a CDI (Contexts and Dependency Injection) module that integrates with CDI containers to enable dependency injection of configuration values.
To use the CDI module, add gestalt-cdi to your build configuration.
The module supports:
- CDI producer for Gestalt instances
- Injection of configuration values using
@InjectConfig - Injection of configuration collections using
@InjectConfigs - CDI extension for automatic configuration setup
Setting up CDI Integration
The CDI module provides a GestaltConfigExtension that automatically registers producers for configuration injection.
Injecting Configuration Values
Use the @InjectConfig annotation to inject individual configuration values:
@Inject
@InjectConfig("db.host")
private String dbHost;
@Inject
@InjectConfig("db.port")
private int dbPort;
Injecting Configuration Collections
Use the @InjectConfigs annotation to inject collections of configuration:
@Inject
@InjectConfigs("servers")
private List<ServerConfig> servers;
Providing a Custom Gestalt Instance
You can provide a custom Gestalt instance using a producer:
@Produces
public Gestalt createGestalt() {
return new GestaltBuilder()
.addSource(ClassPathConfigSourceBuilder.builder().setResource("/config.properties").build())
.build();
}
The CDI extension will automatically detect and use the produced Gestalt instance for injections. If no producer is provided, it will create a default instance.
Configuration Classes with Prefix
You can also create configuration classes that automatically map to a prefix:
@ConfigClassWithPrefix("database")
public class DatabaseConfig {
@InjectConfig
private String host;
@InjectConfig
private int port;
// getters and setters
}