2015-01-10 5 views
0

Я сочинительство одну услуги и наблюдали @property мы можем определить также внутри службы, как и в моей ниже коде:в 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"); 
    } 
} 

Оба свойства отображаются в ФЕЛИКС консоли & доступной внутри моей службы. Итак, что создает разницу, чтобы объявить их внутри компонента или снаружи. Один я видел, что мы не можем использовать @Properties внутри компонента. Но не уверен, что делает их функционально отличными друг от друга &, когда их использовать.

ответ

0

Я думаю, вы говорите о аннотации felix.

Вы можете использовать @Property перед любым методом или переменной-членом. Однако это не означает, что метод будет вызываться или переменная будет установлена. Единственная хорошая вещь в этом состоит в том, что если у вас есть определенная переменная, которая будет удерживать значение свойства (назначая его в методе активации), ваш класс может быть более понятным для себя на основе аннотаций.

С другой стороны, вы можете перечислить свойства в аннотации @Properties. Я предпочитаю этот способ, так как в этом случае я могу точно определить порядок свойств, как они должны появляться в сгенерированном XML-файле метатипа (и на веб-консоли).

Также может случиться так, что свойство конфигурации не назначено ни одной членной переменной, оно используется только в методе активации. В этом случае лучше всего определить его в аннотации @Properties перед классом.