使用托管服务获取配置数据

时间:2014-04-21 09:13:40

标签: osgi osgi-bundle

这是我的ConfigUpdater类

private final class ConfigUpdater implements ManagedService {

    @SuppressWarnings("rawtypes")
    @Override
    public void updated(Dictionary config) throws ConfigurationException {
        if (config == null) {
            return;
        }

        String title = ((String)config.get("title"));

    }
}

我的问题是如何在任何其他类中访问字符串标题?或者如何在任何其他类中获取配置字典...只有在更改配置文件时才会调用更新的方法...一旦更改,如何在其他类中访问其数据?

1 个答案:

答案 0 :(得分:1)

通常,您将创建一个将这些属性公开给其他组件的服务。

例如,您可以为ConfigUpdater提供第二个界面。另一个组件可以从服务注册表中查找/注入此接口,并使用它的方法来访问属性。

我在GitHub上创建了一个示例项目:https://github.com/paulbakker/configuration-example

最重要的部分是实现ManagedService和自定义接口的服务:

@Component(properties=@Property(name=Constants.SERVICE_PID, value="example.configurationservice"))
public class ConfigurationUpdater implements ManagedService, MyConfiguration{

private volatile String message;

@Override
public void updated(@SuppressWarnings("rawtypes") Dictionary properties) throws ConfigurationException {
    message = (String)properties.get("message");
}

@Override
public String getMessage() {
    return message;
}
}

然后可以像这样使用配置:

@Component(provides=ExampleConsumer.class,
    properties= {
    @Property(name = CommandProcessor.COMMAND_SCOPE, value = "example"),
    @Property(name = CommandProcessor.COMMAND_FUNCTION, values = {"showMessage"}) })
public class ExampleConsumer {
    @ServiceDependency
    private volatile MyConfiguration config;

    public void showMessage() {
     String message = config.getMessage();
     System.out.println(message);
    }
}