В настоящее время я пишу приложение, работающее в среде OSGi.Хорошо ли использовать OSGi DS для элементов пользовательского интерфейса?
Для части визуализации я использую JavaFX. Каждый элемент пользовательского интерфейса является прикрепляемым представлением, которое расширяет BorderPane. Его содержимое описывается с использованием элемента fx: root в файле fxml. Некоторым из этих элементов пользовательского интерфейса необходимо обращаться к службам в контейнере OSGi (например, кнопка в представлении может инициировать действие сохранения, которое требует ссылки на PersistenceService).
Каков наилучший способ достичь этого?
Элементы пользовательского интерфейса автоматически генерируются каркасом, который я использую. единственным способом доступа к услугам являются BundleActivator
или статический метод FrameworkUtil.getBundle()
.
Мой подход состоял в том, чтобы использовать статический метод утилиты, но после некоторого большего чтения в сети я понял, что вы, как правило, не хотите кодировать сам OSGi.
Другое решение использует аннотации scr, предоставленные Apache Felix. Маркировка элементов пользовательского интерфейса как @Component
и обращение к каждой необходимой службе через @Reference
будет работать. Но разве это хорошая практика? Должен ли я их комментировать? Я всегда, хотя классы, на которые ссылаются @Component
, управляются OSGi и всегда будут создаваться OSGi.
Спасибо! ServiceTracker выглядит хорошо. Тем не менее, это не отвечает на мой последний вопрос. ServiceTracker решит это без каких-либо сомнений, но мне все же интересно, если аннотирование элементов пользовательского интерфейса является хорошей практикой или нет. Но Весна может просто вставить бобы вправо? – SirWindfield
Это 2016 год, предлагая использовать непосредственно ServiceTracker или Spring DM вместо Declaratives Services, похоже, не является хорошим советом, по крайней мере, с моей точки зрения ;-) –
Я согласен с @ JérémieB. ServiceTracker очень низкоуровневый, он соединяет ваш код напрямую с OSGi, его сложно использовать правильно и его трудно проверить. Пожалуйста, используйте DS со стандартными аннотациями. –