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