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 注释中
我正在编写一项服务并观察到@属性我们也可以在服务内部定义,如下面的代码所示:
@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 注释中