Создание уникальных экземпляров сервиса с использованием Componentfactory без использования servicefactory в OSGI
Я пытаюсь использовать компонент фабрики в OSGi. Мое намерение состоит в том, чтобы создать экземпляры класса A, который отображается как фабрика, используя класс B, который является менеджером фабрики. Класс A содержит некоторые службы с аннотациями @Reference, которые работают нормально. Тот же подход используется для класса C, фабрики (аналогично классу A) с теми же сервисными ссылками с @Reference.
- Будет ли он возвращать один и тот же объект службы как классу A, так и классу C?
- Если да (для вопроса 1), будет ли фабрика сервисов работать для сервисов класса A и класса C (сервисы с атрибутом servicefactory внутри фабрики компонентов (класс A & C)
- Если нет (для вопроса 1), то вместо фабрик есть какой-нибудь подход к получению уникального объекта службы внутри класса A и класса C при использовании @Reference?
- Я могу добиться того же, используя новый оператор для этих услуг в классе A и C соответственно, но я ожидаю некоторого подхода DI. Возможно ли это / достижимо в DS?
1 ответ
Поведение ServiceFactory не зависит от DS. Предполагая, что вы не используете новый PrototypeServiceFactory в R6, пакет, делающий многократное получение для службы ServiceFactory, увидит один и тот же объект службы. Различные пакеты будут видеть разные объекты службы (при условии, что реализация ServiceFactory возвращает разные объекты).
Поэтому, если A и C находятся в одном и том же пакете, они увидят один и тот же объект службы для ссылочных служб, независимо от того, является ли указанная служба ServiceFactory.
Если вам нужны отдельные сервисные объекты, вы должны изучить PrototypeServiceFactory, добавленную в Core R6 и поддерживаемую в DS 1.3.