为服务编写代码来接收配置属性

通过激活方法上提供的 org.osgi.service.component.ComponentContext 对象来提供配置属性。

准备工作

必须完成 使服务与持久身份相关联中描述的任务。

有关此任务

如果在激活之后更新了属性,那么用于注入的方法取决于服务在其 OSGi 声明式服务 (DS) 声明中提供的上下文。

通常,最好是通过在服务声明上使用 modified 属性来声明要专门用于注入所更新属性的方法。 如果修改的方法不可用,那么 DS 会取消激活服务,然后使用新属性来重新激活服务。

取消激活某项服务之后再将其激活,这还可能导致重新启动从属服务,因此,除非明确要求执行此操作,否则应该避免此操作。 使用 modified 属性是接收配置更新的首选方法。

示例

在先前的任务 使服务与持久身份相关联中,您已向 DS 定义服务。 下面举例说明了该任务中所描述 DS 声明内的 activate 和 modified 方法。
private static Dictionary<String, Object> _props = null;

    protected void activate(ComponentContext cc) {
        _props = cc.getProperties();
    }

    protected void modified(Map<?, ?> newProperties) {
        if (newProperties instanceof Dictionary) {
            _props = (Dictionary<String, Object>) newProperties;
        } else {
            _props = new Hashtable(newProperties);
        }
    }
从配置属性获取值时,请使用下列机制来允许一些灵活性:
  • 编写方法代码以要求同一个捆绑包所随附的至少一个缺省属性,但允许用户覆盖,以免迁移用户配置。
  • 忽略多余或无法识别的属性。
服务必须能够单独操作缺省配置。 为了提供合理级别的功能,用户覆盖不得是必需的。

下一步做什么?

提供配置元数据的描述和缺省值