Разрешенные подписи для методов iPOJO @Bind/@Unbind

Во всех примерах iPOJO, которые я видел, обратные вызовы @Bind и @Unbind принимают в качестве аргумента только экземпляр службы, т.е.

// @Requires
// private Foo foo;

@Bind
public void bindFoo(Foo foo) { ... }

@Unbind
public void unbindFoo(Foo foo) { ... }

Схема также позволяет вам

public void bindFoo(ServiceReference reference) { ... }

public void bindFoo(Foo foo, Map<String, Object> properties) { ... }

Могут ли обратные вызовы iPOJO также получить доступ к свойствам службы или ServiceReference? Или вместо этого следует использовать обработчик доски?


person Alexey Romanov    schedule 02.05.2012    source источник


Ответы (1)


Обратные вызовы могут иметь одну из следующих подписей:

  1. Без каких-либо аргументов: метод — это просто уведомление (метод())
  2. С объектом службы: объект является подразумеваемым объектом службы (метод (Service svc))
  3. Со ссылкой на службу OSGi: появляется или исчезает ссылка на службу (метод (ServiceReference ref))
  4. С объектом службы и ссылкой на службу OSGi (метод (Service svc, ServiceReference ref))
  5. С объектом службы и свойствами службы внутри карты (метод (служба svc, свойства карты))
  6. С объектом службы и свойствами службы внутри словаря (метод (служба svc, свойства словаря))

Итак, поддерживаются:

@Bind
public void bind() { ... }

@Bind
public void bind(Service svc) { ... }

@Bind
public void bind(ServiceReference ref) { ... }

@Bind
public void bind(Service svc, ServiceReference ref) { ... }

@Bind
public void bind(Service svc, Map properties) { ... }

@Bind
public void bind(Service svc, Dictionary properties) { ... }

Так что нет проблем с доступом к свойствам службы. За исключением случаев, когда вам действительно нужен ServiceReference, вероятно, лучше не использовать этот объект, специфичный для OSGi (снижение возможности тестирования).

person Clement    schedule 03.05.2012