Почему Spring не поддерживает реализацию области потока? Кто-нибудь использовал потоковые бобы с Spring в контексте веб-приложения? Должно быть стандартное, четкое описание того, как это сделать! (SpringByExample имеет решение — я не проверял — но это не мейнстрим еще.)Почему весна не обеспечивает реализацию области потока?
ответ
Spring действительно обеспечивает объем резьбы, но он не зарегистрирован по умолчанию.
Существующие области бобов определены в документации, here.
одноэлементного
- (по умолчанию) Область применения единого определения боба для одного экземпляра объекта в Spring IoC контейнера.
прототип
- Области применения единого определения боб для любого числа объектов экземпляров.
запрос
- Области применения единого определения боб с жизненным циклом одного запроса как HTTP-; то есть каждый HTTP-запрос имеет свой собственный экземпляр компонента, созданного с обратной стороны одного определения компонента. Действует только в контексте веб-значащей пружины
ApplicationContext
.сессия
- Области применения единого определения боб в жизненном цикле HTTP сессии. Действует только в контексте веб-контекста Spring ApplicationContext. глобального
применения
- Область применение единого определения боба для жизненного цикла
ServletContext
. Действует только в контексте значащей сети весныApplicationContext
.WebSocket
- Области применения единого определения боб для жизненного цикла
WebSocket
. Только действителен в контексте значащей в сети весныApplicationContext
.
Документация затем делает отметку
С весной 3.0, область применения потока доступна, но не зарегистрирована по умолчанию. Для получения дополнительной информации см. Документацию для
SimpleThreadScope
.
Обратите внимание, что, как и в рамках прототипа, объем потока
[
SimpleThreadScope
] не чистит любые объекты, связанные с ним.
В этой реализации области применения используется ThreadLocal
для хранения бобы. Вы не можете обнаружить Thread
, заканчивающийся/умирающий в Java, поэтому контейнер Spring IOC не может явно знать, когда нужно удалить компоненты из ThreadLocal
и вызвать любые методы жизненного цикла. Тогда эта ответственность приходится на разработчика.
Будьте осторожны, когда вы используете этот объем. Например, в контексте объединения потоков, возможно, уже был создан и хранится компонент в одном из повторных потоков пулов. В зависимости от вашего варианта использования это может быть неправильное поведение.
В контексте веб-приложений, вы можете использовать область запроса, что примерно такой же, как с помощью рамки резьбы. Объект, обработанный запросом, создается для каждого запроса, полученного сервером, и отбрасывается, когда запрос завершен.
Считают, что потоки могут быть объединены на серверах, и это, вероятно, причина, почему это не сфера нить на Спринг
Посмотрите на область запроса: http://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s04.html
Ваш ответ на другой вопрос :(. В области запроса бобы не autowire для асинхронной обработки на стороне сервера. Если есть необходимость иметь пакетное задание или любую другую обработку фона, вы не можете использовать ваши весенние бобы, потому что не удастся при аутсорсинге бобы с запросом. –
Вы спросили об использовании компонентов с потоковыми областями в контексте веб-приложения, и именно это я ответил. – Andres
Ну, область потока не совсем такая же, как область запроса. «примерно то же самое». Может быть, я не был достаточно ясен в вопросе. Спасибо за ответ в любом случае! –
На самом деле он обеспечивает область потока, начиная с Spring 3.0. Возможно, вам придется зарегистрировать его самостоятельно, а не использовать его из коробки.
Если вы говорите о org.springframework.context.support.SimpleThreadScope, это не делает никакой очистки, и это непригодно. Это, в основном, пул потоков пула ..., который является werid! :) SpringByExample имеет реализацию, которая может работать, но я еще не пробовал ее. –
Я не сказал, что это хороший, но есть один. –
:) да, спасибо за ответ. –
- 1. Весна обеспечивает локальное хранилище?
- 2. Абстрактный базовый класс не обеспечивает реализацию функции
- 3. Какого класса обеспечивает реализацию для метода getRequestDispatcher()
- 4. Очередь на реализацию потока
- 5. структурная схема модульного тестирования обеспечивает реализацию
- 6. Весна и атрибут области
- 7. Весна, использующая реализацию Монго по JPA
- 8. Весна - как реализовать реализацию интерфейса бетона?
- 9. Почему не весна?
- 10. Весна: Как получить динамическую реализацию бина?
- 11. Perl multithreading - прекратить успешную реализацию первого потока
- 12. Весна autwireing области области сеанса в AuthenticationSuccessHandler не работает
- 13. Весна не в состоянии выбрать Autowired реализацию по профилю
- 14. C++ asio обеспечивает асинхронное выполнение потока
- 15. Почему Microsoft не меняет реализацию SetPixel() на реализацию быстрее?
- 16. Какая польза от Django-Taggit обеспечивает простую реализацию меток ManyToManyField()?
- 17. Тестирование Grails/Spock обеспечивает пропущенную реализацию для службы
- 18. Как создать класс, который обеспечивает реализацию некоторых интерфейсов
- 19. Почему это не обеспечивает множественную ошибку определения?
- 20. Почему повышение :: вариант не обеспечивает оператор! =
- 21. Почему интерфейс MPI не обеспечивает сериализацию?
- 22. Создание потока через реализацию работоспособного интерфейса
- 23. Почему GIL Python обеспечивает строгий порядок обработки?
- 24. ли весна обеспечивает 2 mvc платформы, grails и весной mvc?
- 25. Как свойство singleton с блокировкой обеспечивает безопасность потока?
- 26. Почему не изменчивость в java 5+ обеспечивает видимость из другого потока?
- 27. Почему JVM не обнаруживает недостающую реализацию метода?
- 28. Почему Functor не предоставляет стандартную реализацию fmap?
- 29. весна-периодического потока/раскол после стадии
- 30. Почему Java скрывает реализацию getLocalHostName()?
Я не совсем понял ваш ответ, не могли бы вы объяснить это дальше? Вы говорите, что мы не можем определить конец потока, но почему это проблема? Если контейнер IOC создает экземпляр и помещает его в хранилище ThreadLocal этого потока, он может передать его потоку и всякий раз, когда этот поток замирает, объекты на локальном хранилище потоков будут собирать мусор, не так ли ? Тогда почему контейнер DI должен заботиться о жизненном цикле потока, он может просто ввести объект и передать его. Что мне здесь не хватает? –
@SotiriosDelimanolis «Серьезная» проблема, которую вы видите с областью потока, существует также с областью Prototype, так же, как контейнер Spring не знает, когда bean bean-объект Thread должен быть уничтожен, он не знает то же самое о компонентах scope Prototype также. –
@SotiriosDelimanolis Со ссылкой на мой комментарий выше, пожалуйста, обратитесь к документам Spring по адресу https://docs.spring.io/spring/docs/4.3.14.RELEASE/spring-framework-reference/htmlsingle/#beans-factory-scopes- прототип, который гласит: «В отличие от других областей, Spring не справляется с полным жизненным циклом прототипа: контейнер создает, настраивает и иным образом собирает объект-прототип и передает его клиенту, без дальнейшей записи этого экземпляра прототипа ..... Все управление жизненным циклом за эту точку должно обрабатываться клиентом ». –