Что нужно внедрять как Bean, а что создавать явно через new?
Коллеги, если при разработке проекта на Spring мне нужно создать объект, например, RestTemplate, то как понять, внедрять ли его как Bean, или создавать через new? Чем нужно руководствоваться при принятии решения?
Ответы (1 шт):
Всё зависит от того какой объект ты создаёшь, как часто ты его будешь использовать и за что он отвечает.
Первый кейс. Допустим ты делаешь запрос в бд и для этого тебе требуется Connection. Для начала ты создаешь объект DataSource. Каждое создание такого объекта занимает время, поскольку открывается реальное сокет-соединение с базой данных. Ты можешь создавать этот объект при каждом запросе в БД, а можешь создать его только один раз и использовать повторно.
Второй кейс. У Spring есть spring.active.profile (Например, dev для разработки, test для тестирования, prod для продакшена). Профили нужны для запуска приложения в разных режимах со своими application.property, которые могут отличаться. Можно создавать разные бины и приписывать их к определённым профилям. Ситуация из разряда конь в вакууме. У тебя есть приложение "Мой ВУЗ" и ты можешь запустить 2 профиля: employee и student. При запуске приложения с профилем employee создаётся бин с соответствующей ролью и пермиссиями и функционалом(выставлять оценки, добавлять задания и т.п.) для преподавателя. При запуске приложения с профилем student функционал будет совсем другой (посмотреть зачётку, отправить отчёт по лабораторной и т.п.).