Позволит ли Spring мне создавать Java-приложения с тестированием Dependency Injection и плагином?

Если я использую Spring (или другую инфраструктуру веб-приложений Java), нужно ли мне создавать систему плагинов для моего приложения? Разве это не часть цели использования фреймворка, чтобы программисту не нужно было строить архитектуру, она была там, и мне просто нужно подключиться к ней (с помощью Dependency Injection, конфигурации xml или каким-либо другим способом)?

Я задал похожий вопрос по программированию StackExchange, но не думаю, что мне следовало бы его туда ставить. Я сформулировал свой вопрос немного по-другому, чтобы конкретизировать SO.

РЕДАКТИРОВАТЬ: Я не могу написать это правильно. Для меня веб-приложение для контекста этого вопроса означало серверную часть системы, а не пользовательский интерфейс, Javascript и т. Д. Только переключение классов в приложении (фиктивная база данных для тестирования, регистратор и т. Д.).

РЕДАКТИРОВАТЬ: Спасибо Аарону за веб-сайт, но, похоже, мой ответ - нет. Мне не нужно создавать другой плагин-фреймворк поверх Spring, http://deepeshdarshan.wordpress.com/2013/03/20/learn-spring-by-example-constructor-injection/.

Похоже, что xml-файл будет невероятно трудно поддерживать, поэтому ссылка Аарона выглядит многообещающе.

http://deepeshdarshan.wordpress.com/2013/03/24/learn-spring-by-example-autodiscovery/

Зависимости должны быть в курсе где-то.

1 ответ

Решение

Не обязательно. Spring может имитировать систему плагинов, если вы включаете автообнаружение bean-компонентов в определенных пакетах или создаете контекст приложения, который содержит все плагины, которые вы хотите видеть. Первый более гибкий (просто добавьте JAR-файлы в classpath для добавления плагинов), в то время как второй немного более безопасен (система "плагинов" будет видеть только бины, о которых вы знаете).

Следующим шагом является определение общего интерфейса, скажем, IPlugin найти и настроить каждый плагин.

Теперь вы можете получить список в менеджере плагинов, используя

 @Autowired
 private List<IPlugin> plugins;

Эта строка кода найдет все известные / видимые компоненты, которые реализуют IPlugin, собрать их в список и ввести их в поле plugins,

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