Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 12335|Ответ: 0

[JavaEE] Разница между @Bean и @Service аннотациями

[Скопировать ссылку]
Опубликовано 30.08.2018 13:29:41 | | |
Сегодня я обсудил с коллегами, стоит ли использовать комбинацию @Configuration и @Bean для создания бобов в Spring Boot или использовать @Service и другие аннотации непосредственно на занятии. Автор обычно использует первый вариант, то есть сочетание @Configuration и @Bean.

Давайте сначала рассмотрим пример: цель — создать «боб» для SearchService.

Используйте @Service напрямую:




Запусти приложение, доступ к браузеру: http://localhost:8081/search?q=koly, отображение страницы: ["hello", "koly"]

Способы использования @Configuration и @Bean:






По сравнению с прямым использованием @Service кода, существует класс AppConfig, который удаляет @Service аннотаций, размещённых поверх ElasticSearchServiceImpl. На первый взгляд, там больше кода и классов. Так в чём же преимущества использования второго?

Автор считает, что преимущества таковы:

Разделение вопросов

Используя методы @Configuration и @Bean, создание зёрен происходит в одном месте, и интерфейс и его реализация никак не связаны с созданием зерна.

Если нужно изменить создание зерна, то достаточно просто просмотреть и изменить соответствующий класс конфигурации, и не нужно обращаться к соответствующему Java-bean для внесения изменений. Например, иногда создание бобов требует сотрудничества с @Scope или @Profile, и нужно изменить только класс конфигурации.

Одноразовая служба

@service сама аннотация подразумевает две функции:

Одна из них — создание фасоли;
Вторая — определить класс как услугу.
Указывает, что аннотированный класс — это «Сервис», изначально определённый как доменно-управляемый

Дизайн (Эванс, 2003) как «операция, предлагаемая как интерфейс, который стоит самостоятельно в модели, без инкапсулированного состояния».

Выше приведено объяснение Спринга @Service аннотации. Этот is@Service на самом деле представляет собой бессостоятельную, независимую операцию интерфейса в DDD.

В рамках сотрудничества @Bean и @Configuration создание бобов передаётся отдельному классу, а идентичность сервиса — интерфейсу и имя класса на Java. Это также отражено в Spring Data, таких как Repository, который идентифицируется по названию, например, CrudRepository. Таким образом, Сервис также отражается в названии. Специфические иерархические определения могут использоваться для предоставления дополнительных слоёв в зависимости от названия проекта без использования аннотаций, предоставленных Spring, таких как слой Mapper, слой Validator и др.

Кроме того, боб и сервис — это двумерные понятия. Один — о конкретной реализации, другой — о концепциях в DDD.

Более гибко

Используя @Bean методы, вы можете создавать экземпляры классов в библиотеке. Если вы используете метод @Service, вы не сможете добавить @Service комментариев к соответствующим классам в библиотеке.

Наименьшее знание

Принцип минимальных знаний означает:

Чем меньше технологий или знаний требуется для выполнения функции, тем лучше, чтобы обеспечить простоту проекта и снизить сложность освоения проекта.

Поскольку нельзя создавать экземпляры классов в библиотеке классов с помощью @Service, при возникновении аналогичных потребностей нужно использовать форму @Configuration и @Bean. На этом этапе в проекте есть аннотации, такие как @Service, @Configuration и @Bean, и эти аннотации делают то же самое — то есть создают зерно.

С @Service существует высокая вероятность одновременного @Service, @Component, @Configuration и @Bean.

при этом использование @Configuration и @Bean может полностью исключить использование @Service и @Component, что соответствует принципу минимальных знаний.

Наконец, кстати, Spring Beans были созданы в xml и позже использовали Java для конфигурации. Основная причина отказа от использования XML заключается в том, что он недостаточно лаконичен и не содержит таких функций, как проверка времени компиляции, а не необходимость распределения создания зерен между классами.

В итоге автор предпочитает использовать @Configuration и @Bean методы.




Предыдущий:Простой способ очистить экран из командной строки на Python
Следующий:Несколько способов использования распределённых замков (redis, zookeeper, база данных)
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com