OSGi 中的@Properties

@Properties in OSGi

我正在编写一项服务并观察到@属性我们也可以在服务内部定义,如下面的代码所示:

@Component(metatype = true, immediate = true, description = "Demo Service to test")
@Service(value = DemoService.class)
@Properties({
        @Property(name = "testprop" , value = "This is Test Property")
})
public class DemoServiceImpl implements DemoService {
     @Property(name = "localprop", value = "Local Value")
    @Activate
    public void activate(ComponentContext ctx)
    {
        String testprop = (String)ctx.getProperties().get("testprop");
        String localprop = (String)ctx.getProperties().get("localprop");
    }
}

这两个属性都显示在 felix 控制台中并且可以在我的服务中访问。那么是什么造成了在组件内部或外部声明它们的区别。我看到我们不能在组件内部使用@Properties。但不确定是什么让它们在功能上彼此不同以及何时使用它们。

我猜你说的是 felix 注释。

可以在任何方法或成员变量前使用@属性。但是,这并不意味着将调用方法或设置变量。唯一的好处是,如果你有一个特定的变量来保存 属性 的值(通过在 activate 方法中分配它),你的 class 可以根据注释。

另一方面,您可以在@Properties 注释中列出属性。我更喜欢这种方式,因为在这种情况下,我可以准确定义属性的顺序,它们应该如何出现在生成的元类型 xml 文件中(以及在 webconsole 上)。

也可能发生,配置属性没有分配给任何成员变量,它只在activate方法中使用。在这种情况下,定义它的最佳位置是在 class.

前面的 @Properties 注释中