Позволит ли 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
,