Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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-біна для внесення змін. Наприклад, іноді створення бобів потрібно співпрацювати з @Scope або @Profile, і лише змінювати клас конфігурації.

Одиночне завдання

@service сама анотація передбачає дві відповідальності:

Одна з них — створення квасолі;
Друга — ідентифікувати клас як послугу.
Вказує, що анотований клас є «Сервісом», спочатку визначеним як Domain-Driven

Design (Evans, 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