Приведенные выше аннотации тесно связаны, поэтому мои вопросы заключаются в следующем:
1- Могут ли @Component,
@Repository
и аннотации @Service
использоваться взаимозаменяемо в Spring или они предоставляют какую-либо конкретную функциональность, помимо действия в качестве аннотации?
Другими словами, если у меня есть класс обслуживания и я меняю аннотацию с @Service
на @Component
:
2- Будет ли он продолжать вести себя так же? или аннотация также влияет на поведение и функциональность класса?
3-Могу ли я обменять их и, например, использовать, @Service
когда концептуально я должен был бы @Repository
?
@Repository
и@Service
они являются специализациями@Component
, добавляя семантическое значение, указывающее на полезность аннотированного класса (@Repository
для доступа к базе данных и@Service
для бизнес-уровня).Кроме того, классы, помеченные как
@Repository
, имеют право использовать постпроцессорPersistenceExceptionTranslationPostProcessor
, который переводит ошибки БД в исключения типовDataAccessException
(согласно javadoc класса)Я понимаю, что у вас не будет проблем с заменой одной аннотации на другую, если только вы не используете этот постпроцессор.
Как сказано в документации Spring , @Component является основным стереотипом и указывает, что класс с этой аннотацией является компонентом Spring или Bean.
@Repository , @Service и @Controller — это спецификации аннотации @Component для конкретных случаев, например, для сохраняемости данных, сервисов или для уровня представления соответственно.
Следовательно, вы можете аннотировать свои bean-компоненты с помощью аннотации @Component , но аннотирование их с помощью @Repository , @Service или @Controller даст вам дополнительные преимущества, поскольку некоторые модули Spring обрабатывают эти аннотации по-разному.
Обычно вы можете использовать один вместо другого, но делать это не рекомендуется.