Контекст: веб-приложение
Я раньше не использовал Spring, но, согласно документам Spring, все бобы являются singleton
, если мы не объявим их prototype
.
- Без использования Spring:
Обычно я создаю новый DAO при вызове уровня бизнес-услуги. Если это служба RESTfull, я создаю почти все объекты, зависящие от вызова.
- С весны:
Я могу аннотировать классы доступа к данным с помощью @Repository
а также использовать @Service
для классов уровня обслуживания.
Так что мои занятия с выше аннотациями являются singleton
по умолчанию. Существует аннотация @Scope
которую мы можем объявить как прототип, но никто не делает этого.
- Без весны:
new Object();
каждый раз - С весной:
singleton
Мои вопросы,
- То, как я раньше использовал (создавая новый экземпляр каждый раз), неверно?
- Если
@Repository
являетсяsingleton
, как он справляется с безопасностью потоков, когда нет такой вещи? (Предположим, что это делается весенними прокси) - Какова наилучшая практика,
@Repository
достаточно или добавление@Scope('prototype')
было бы лучше? - Я не вижу, чтобы кто-то использовал
@Scope('prototype')
с@Repository
(согласно учебникам, блогам и т.д.). Есть ли известная причина? - Что делать, если к моему классу DAO обращаются несколько больших потоков с очень высокой частотой? (Это тот, который я касаюсь больше всего)
благодаря