Преимущества использования стереотипов spring?

Я разрабатываю веб-приложение с помощью spring -mvc.

Теперь доступны стереотипы @Controller, @Service и @Repository.

Я нашел @Controller особенно полезным, особенно потому, что использую

<context:component-scan base-package="my.cool.controller"/>

Теперь, что касается @Service и @Repository, пока что выглядит как

  • Исключения лучше обрабатываются, если класс аннотируется с правильным стереотипом, хорошо, это преимущество, которое я признал
  • Я мог бы использовать компонентное сканирование для служб и DAO/репозиториев, однако мне не нравится идея использования компонентного сканирования, поскольку он замедляет время запуска приложения, и это ключевая функция для меня (даже если это всего лишь 1 сек, и я передислоцирую раз в неделю).

Итак, помимо лучших исключений, любое другое преимущество вообще? Использует ли аннотирование классов влияние на производительность?

Ответ 1

Объяснение стереотипов:

  • @Service - аннотировать все ваши классы обслуживания с помощью @Service. Этот слой знает единицу работы. Вся ваша бизнес-логика будет в классах Service. Обычно методы уровня обслуживания покрываются по транзакции. Вы можете сделать несколько вызовов DAO из метода службы, если одна транзакция завершилась неудачей, все транзакции должны откат.
  • @Repository - аннотировать все ваши классы DAO с помощью @Repository. Вся логика доступа к базе данных должна быть в классах DAO.
  • @Component - аннотировать ваши другие компоненты (например, классы ресурсов REST) ​​с компонентным стереотипом.
  • @Autowired - Пусть Spring автоматически подключит другие beans к вашим классам с помощью @Autowired аннотации.

@Component является общим стереотипом для любого компонента, содержащего Spring. @Repository, @Service и @Controller являются специализациями @Component для более конкретных случаев использования, например, в уровнях персистентности, обслуживания и представления соответственно.

Причины их использования:

  • Основное преимущество использования @Repository или @Service над @Component заключается в том, что легко написать pointcut AOP, который нацелен, например, на все классы, аннотированные с помощью @Repository.
  • Вам не нужно записывать определения bean в текстовый файл контекста. Вместо этого аннотируйте классы и используйте их автоуведомлением.
  • Специализированные аннотации помогают четко разграничить уровни приложений (в стандартном 3-уровневом приложении).

Теперь практическое влияние использования контекста xml beans и аннотаций одинаково. Сканирование компонентов немного дороже (при сканировании на @Service, @Component). Аннотации "анализируются" с отражением, xml - с синтаксическим анализатором xml. Но, как вы сказали, это время запуска - это происходит только один раз. И на умеренной машине он начинается довольно быстро даже с аннотациями.

Ответ 2

Сканирование компонентов избавляет вас от определения каждого bean вручную с помощью конфигурации xml или java.

Для определения слоев, слоев данных и т.д. существуют несколько типов стерео. Также, на основе разных типов стерео, если вы хотите сделать что-то конкретное, вы можете сделать это.