@Retention(value=CLASS)
@Target(value=METHOD)
public @interface ConfigurationDependency
In the following example, the "Printer" component depends on a configuration whose PID name is "sample.PrinterConfiguration". This service will initialize its ip/port number from the provided configuration.
First, we define the configuration metadata, using standard bndtools metatatype annotations (see http://www.aqute.biz/Bnd/MetaType):
 
 package sample;
 import aQute.bnd.annotation.metatype.Meta.AD;
 import aQute.bnd.annotation.metatype.Meta.OCD;
 @OCD(description = "Declare here the Printer Configuration.")
 public interface PrinterConfiguration {
     @AD(description = "Enter the printer ip address")
     String ipAddress();
     @AD(description = "Enter the printer address port number.")
     int portNumber();
 }
 
 
 
 Next, we define our Printer service which depends on the PrinterConfiguration:
 
 
 
 package sample;
 import aQute.bnd.annotation.metatype.*;
 @Component
 public class Printer {
     @ConfigurationDependency(pidClass = PrinterConfiguration.class) // Will use pid "sample.PrinterConfiguration"
     void updated(Dictionary props) {
         // load configuration from the provided dictionary, or throw an exception of any configuration error.
         PrinterConfig cnf = Configurable.createConfigurable(PrinterConfig.class, props);
         String ip = cnf.ipAddress();
         int port = cnf.portNumber();
         ...
     }
 }
 
 | Modifier and Type | Optional Element and Description | 
|---|---|
| java.lang.String | descriptionDeprecated. 
 use standard bndtools metatype annotations instead (see http://www.aqute.biz/Bnd/MetaType) | 
| java.lang.String | headingDeprecated. 
 use standard bndtools metatype annotations instead (see http://www.aqute.biz/Bnd/MetaType) | 
| PropertyMetaData[] | metadataDeprecated. 
 use standard bndtools metatype annotations instead (see http://www.aqute.biz/Bnd/MetaType) | 
| java.lang.String | nameThe name for this configuration dependency. | 
| java.lang.String | pidReturns the pid for a given service (by default, the pid is the service class name). | 
| java.lang.Class<?> | pidClassReturns the pid from a class name. | 
| boolean | propagateReturns true if the configuration properties must be published along with the service. | 
public abstract java.lang.String pid
public abstract java.lang.Class<?> pidClass
public abstract boolean propagate
public abstract java.lang.String name
Usage example of a Configuration dependency whose pid and propagate flag is configured dynamically from init method:
  /**
    * A Service that dynamically defines an extra dynamic configuration dependency from its init method. 
    */
  @Component
  class X {
      private Dictionary m_config;
      
      // Inject initial Configuration (injected before any other required dependencies)
      @ConfigurationDependency
      void componentConfiguration(Dictionary config) {
           // you must throw an exception if the configuration is not valid
           m_config = config;
      }
      
      /**
       * All unnamed dependencies are injected: we can now configure our dynamic configuration whose dependency name is "global".
       */
      @Init
      Map init() {
          return new HashMap() {{
              put("global.pid", m_config.get("globalConfig.pid"));
              put("global.propagate", m_config.get("globalConfig.propagate"));
          }};
      } 
 
      // Injected after init, and dynamically configured by the init method.
      @ConfigurationDependency(name="global")
      void globalConfiguration(Dictionary globalConfig) {
           // you must throw an exception if the configuration is not valid
      }
 
      /**
       * All dependencies are injected and our service is now ready to be published.
       */
      @Start
      void start() {
      }
  }
  public abstract java.lang.String heading
public abstract java.lang.String description
public abstract PropertyMetaData[] metadata