Создание уникальных экземпляров сервиса с использованием Componentfactory без использования servicefactory в OSGI

Я пытаюсь использовать компонент фабрики в OSGi. Мое намерение состоит в том, чтобы создать экземпляры класса A, который отображается как фабрика, используя класс B, который является менеджером фабрики. Класс A содержит некоторые службы с аннотациями @Reference, которые работают нормально. Тот же подход используется для класса C, фабрики (аналогично классу A) с теми же сервисными ссылками с @Reference.

  1. Будет ли он возвращать один и тот же объект службы как классу A, так и классу C?
  2. Если да (для вопроса 1), будет ли фабрика сервисов работать для сервисов класса A и класса C (сервисы с атрибутом servicefactory внутри фабрики компонентов (класс A & C)
  3. Если нет (для вопроса 1), то вместо фабрик есть какой-нибудь подход к получению уникального объекта службы внутри класса A и класса C при использовании @Reference?
  4. Я могу добиться того же, используя новый оператор для этих услуг в классе A и C соответственно, но я ожидаю некоторого подхода DI. Возможно ли это / достижимо в DS?

1 ответ

Поведение ServiceFactory не зависит от DS. Предполагая, что вы не используете новый PrototypeServiceFactory в R6, пакет, делающий многократное получение для службы ServiceFactory, увидит один и тот же объект службы. Различные пакеты будут видеть разные объекты службы (при условии, что реализация ServiceFactory возвращает разные объекты).

Поэтому, если A и C находятся в одном и том же пакете, они увидят один и тот же объект службы для ссылочных служб, независимо от того, является ли указанная служба ServiceFactory.

Если вам нужны отдельные сервисные объекты, вы должны изучить PrototypeServiceFactory, добавленную в Core R6 и поддерживаемую в DS 1.3.

Другие вопросы по тегам