Я изучаю Spring, и у меня возникает вопрос, как вы используете его в автономных приложениях (а также при использовании его для создания веб-приложений). Примеры, которые я уже кодировал до сих пор, использовали простой основной метод, когда я извлекаю bean-компоненты, вызывая getBean на. Контекстный объект. Однако вы, вероятно, захотите сделать это в нескольких классах, так что сначала вы получаете контекст, а затем вызываете getBean или есть другие альтернативы для чистых? Или это так, как вы это делаете в автономных и веб-приложениях?Использование Spring в автономных приложениях
ответ
Если вы звоните context.getBean()
во всем мире, вам, вероятно, не хватает всей точки Spring, которая представляет собой инфраструктуру инъекций зависимостей.
В автономном приложении вы обычно вызываете context.getBean()
только один раз (или, по крайней мере, очень редко), чтобы получить «корневой» компонент. Этот компонент вводится весной другими фасолью и так далее.
В веб-приложении все зависит от того, какую структуру вы используете. Но, как правило, вы регистрируете прослушиватель в web.xml, который загружает контекст для вас, а контроллеры создаются и/или вводятся Spring.
Один класс (ваш основной класс, возможно) должен быть осведомлен о Spring для создания контекста. Все остальные классы могут быть связаны друг с другом с помощью Spring и не нуждаются в контекстном знании.
Это зависит от приложения, которое вы пишете, но вы должны ограничить getBean()
призывом к минимуму, предпочтительно одному. Вы извлекаете первый компонент непосредственно из контекста и ставите остальную часть логики в самих бобов. Что-то вдоль линий:
Bootstrap boot = context.getBean(Bootstrap.class);
boot.start();
И все остальные логики приложения происходит внутри start()
. Он может создавать темы, прослушивать события и т. Д.
Вы находитесь на правильных линиях. Ваш основной метод будет инициализировать ваш контекст приложения, как вы обнаружили. Тогда трюк должен использовать этот контекст приложения, чтобы создать точку входа в ваше приложение. Этот компонент, созданный с пружиной, будет подключен для вас.
import org.springframework.beans.factory.BeanFactoryUtils;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ApplicationMain {
public static void main(String[] args) {
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:/META-INF/spring/applicationContext.xml");
MyApplication app = BeanFactoryUtils.beanOfType(ctx, MyApplication.class);
app.init();
}
}
Я бы просто настроить app.init как приложение init-method off. таким образом, поиск и явный вызов не нужны. все управляется весной. – Laures
@Laures - Согласитесь, это * может * быть сделано более неявным, но иногда явный вызов делает вещи более ясными. Обратите внимание, что Spring имеет интерфейс 'org.springframework.context.Lifecycle', который может быть применим здесь. Когда 'start()', 'stop()' или 'isRunning()' вызывается в контексте приложения, все компоненты, реализующие интерфейс Lifecycle, имеют эквивалентный метод. В простых примерах, подобных этому, я думаю, что это слишком много. – sw1nn
- 1. управление сеансом в автономных приложениях
- 2. Запуск миграции в автономных приложениях
- 3. с использованием навигации WPF в автономных приложениях
- 4. Django ORM на автономных приложениях
- 5. JVM Clustering в автономных java-приложениях
- 6. Использование «автономных круглых скобок»
- 7. Использование GMP в автономных программах
- 8. Использование C# и бритвы на автономных страницах
- 9. GCC: видимость символов в автономных приложениях на C++
- 10. Как прочитать файл ресурсов в автономных приложениях Java
- 11. В автономных приложениях JavaFX отсутствует криптографическая служба шифрования?
- 12. Использование ASIO автономных заголовков библиотеки
- 13. Автономных J и EntityManager
- 14. web.xml требуется в приложениях Spring
- 15. @ Приоритетный эквивалент для автономных репозиториев Spring JPA
- 16. Использование FacebookAuthProvider в приложениях
- 17. Использование Regex для замены автономных символов
- 18. Использование многопоточности В веб-приложениях
- 19. Использование «Lock» в веб-приложениях
- 20. Использование jQuery в приложениях PebbleJS
- 21. Использование Flyway в модульных приложениях
- 22. Использование Solver в приложениях JS
- 23. Использование WINAPI в приложениях Qt
- 24. Использование экрана доступа в приложениях.
- 25. Использование GetDlgItemText() в приложениях win32
- 26. Использование ConfigurationManager в веб-приложениях
- 27. Использование шрифтов в мобильных приложениях
- 28. Использование памяти в Java-приложениях
- 29. Использование HTML в приложениях Swing
- 30. Использование конвертеров в приложениях WINRT
О, так что вы используете его только для загрузки, обвязывающего приложение. – LuckyLuke
Да, точно, как показано в @Thomasz Nurkiewiczs. –
Хорошо, спасибо. Не могли бы вы объяснить, что вы подразумеваете под этим, я скучаю по поводу рамки DI? Чтобы я мог читать. Также почему вы должны только вызывать его один раз? – LuckyLuke