2016-08-29 6 views
0

Я разрабатываю пакет OSGi, который использовал ссылку @Reference для ссылки на службу. Во время поиска в Google я могу увидеть несколько примеров, используя @References аннотация на уровне класса также внутри класса только связывание & unbind методы используются для всех ссылок службы.разница между @Reference & @References аннотация в felix scr

@References(
    @Reference(cardinality= ReferenceCardinality.MANDATORY_MULTIPLE, referenceInterface = TestInterface1.class,policy = ReferencePolicy.DYNAMIC) 
    @Reference(cardinality= ReferenceCardinality.MANDATORY_MULTIPLE, referenceInterface = TestInterface2.class,policy = ReferencePolicy.DYNAMIC)) 
class TestComponent { 
.. 
public void bind(TestInterface1 interface) 
{} 
public void unbind(TestInterface1 interface){} 

public void bind(TestInterface2 interface) 
{} 
public void unbind(TestInterface2 interface){} 

} 

В чем разница между @Reference & @References? Есть ли какие-либо показатели эффективности/рекомендуемая мера для использования @References? Поскольку bind & имена имен unbind одинаковы для всех классов Reference.

+0

Говоря о стиле Java, например '@ Reference', важно показать полное имя пакета. В разных библиотеках и пакетах существует множество типов аннотаций @ @ Reference. –

ответ

1

В Java 7 невозможно определить repeating annotation. Поэтому необходимо использовать аннотацию контейнера.

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

+0

Стоит упомянуть, что '@ References' происходит из [Apache Felix SCR Annotations] (http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html) (хотя не задокументировано). В аннотации служб OSGi (https://osgi.org/javadoc/r6/cmpn/org/osgi/service/component/annotations/package-summary.html) его не включить. –

+0

Спасибо Балаз. как насчет имени метода bind & unbind. Поскольку я мог видеть только привязку и вскрытие для всех аннотаций, определенных в аннотациях контейнера. Поскольку Шон не упоминал, где это задокументировано! – Shriram

+0

@Shiram: Я не уверен, что понимаю ваш вопрос. Аннотации контейнера ссылок не имеют атрибута bind/unbind. Ссылка содержит аннотацию. Ссылка работает так же, если она указана в списке, как если бы она была помещена перед типом. Я предлагаю вам проверить javadoc вместо документации: http://javadox.com/org.apache.felix/org.apache.felix.scr.annotations/1.9.8/org/apache/felix/scr/ аннотации/пакет-summary.html –