我正在编写一个服务并观察@Property我们也可以在服务中定义,如下面的代码所示:
@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 console&在我的服务内部访问。那么是什么产生了在组件内部或外部声明它们的区别。我看到我们不能在组件内部使用@Properties。但不确定是什么让它们在功能上彼此不同而且什么时候使用。
答案 0 :(得分:0)
我猜你说的是felix注释。
您可以在任何方法或成员变量前使用@Property。但是,这并不意味着将调用该方法或设置变量。它唯一的好处是,如果你有一个特定的变量来保存属性的值(通过在activate方法中赋值),你的类可以根据注释进行更多的自我解释。
另一方面,您可以列出@Properties注释中的属性。我更喜欢这种方式,因为在这种情况下,我可以准确定义属性的顺序,它们应该如何出现在生成的元类型xml文件中(以及在webconsole上)。
也可能发生,配置属性未分配给任何成员变量,它仅在activate方法中使用。在这种情况下,定义它的最佳位置是在类前面的@Properties注释中。