Spring - Плутанина щодо конфігурації?


9

Десь я прочитав Spring пропонує зручність у налаштуванні. Але весняні люди вносять настільки багато змін у конфігурації, що я зараз дійсно заплутався у використанні конфігурації xml або анотації.

Я хотів би, щоб хто-небудь запропонував методологію надійного вогню або правило, у використанні xml та приміток.


Приклади в SO показують, що багато початківців, як я, плутаються в конфігурації.

  • посилання-1

    Я, здається, не розумію функціональність позаду <context:annotation-config>та <context:component-scan>.

    З того, що я читав, вони, схоже, обробляють різні примітки (@ Required, @Autowired тощо проти @Component, @Repository, @Service тощо), а також із того, що я читав, вони реєструють ті самі класи процесорів після обробки бобів.

    Щоб мене ще більше плутати, є annotation-configатрибут на <context:component-scan>...

  • посилання 2

    У мене ще є тег сканування компонентів:

    <context:component-scan base-package="com.mycompany.maventestwebapp" />

    але у мене є ще один тег (схожий на подібне завдання), цей:

    <annotation-driven />

    Яка різниця між цими двома тегами? Інша "дивна" річ полягає в тому, що попередній приклад (у якому не використовується тег, керований коментуванням) дуже схожий на проект, створений STS, використовуючи проект Spring MVC Template Project, але якщо я видаляю тег, керований анотацією, з його конфігурації Файл проекту не запускається і дайте мені таку помилку: HTTP Status 404 - ...

Навесні 3.2 більше не потрібен cglib для проксі, але в нижчих версіях використовується cglib. Цитата з блогу Спрінгссор

Для того, щоб генерувати такі проксі, Spring використовує сторонні бібліотеки під назвою cglib. На жаль, цей проект більше не працює. Навесні 3.2 велика ймовірність, що Spring використовує Javassist замість цього за замовчуванням.

Чи достатньо їх, щоб припустити, що Spring - це плутанина щодо конфігурації?


1
"Весняні люди вносять стільки змін у конфігурацію" - ви можете, будь ласка, навести приклад? Це допоможе читачам краще зрозуміти вашу проблему та відповісти на ваше запитання
gnat

9
Питання не так добре, але назва, звичайно, смішна.
Флоріан Маргайн

1
@gnat в процесі викладання себе весною, я гуляв навколо і натрапляв на ті самі речі, виражені різними способами. у весняній документації йдеться про один спосіб виконання справ, у підручнику йдеться про інший спосіб, обидва є правильними, крива навчання настільки висока. Моє питання лише… Чи є чітка документація, яка показує всі можливі способи виконання однієї речі весною ?

1
@tito питання, як ви заявляєте в коментарях, "чи є документація", звучить як запит на ресурс. Запити на ресурси не дуже вітаються у програмістів . Наскільки я розумію, замість цього можна було б поставити основну проблему (наскільки я бачу, ви зробили саме це в тексті питання, "заплутавшись у використанні") - проблему, яка мала вирішитись із запитом на конкретний ресурс
гнат

2
@tito Я думаю, що ваша проблема полягає в змішуванні старих навчальних посібників з новою документацією. Весна стала дуже "умовою щодо конфігурації", де висловлюватися не потрібно так само, як раніше. Однак, старі підручники (особливо до 3.1) роблять багато чого, що зараз непотрібне.
Matsemann

Відповіді:


5

Весна має на меті запропонувати вам основу, де існує «умова щодо конфігурації». Однак реальність полягає в тому, що Spring-додатки дійсно потребують певної кількості конфігурації.

У весняній версії 2.5.x та більш ранній версії загальною ідіомою було надання цієї конфігурації за допомогою XML. З Spring 3.0+ ідіоматичним способом є використання приміток (те, що також заохочує Java EE6 / 7).

Як бічне зауваження, можна побачити (прикро?) Бачити анотоване об’єкт JPA, додати в одне поле 4+ анотацій досить просто ....


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

1
У мене є методи з десятью анотаціями, кожна з яких робить іншу корисну річ…
стипендіати Donal

1
З іншого боку, також можна мати об'єкт JPA з одним анотацією @Entity на класі та більше нічого. Якщо це не домовленість щодо конфігурації, я не знаю, що таке. Якщо ви відчуваєте необхідність, щоб все працювало саме так, як ви цього хочете, не скаржтеся, що ви закінчилися з великою кількістю конфігурації - радійте, що це можливо взагалі.
Майкл Боргвардт

2
Я не розумію, чому 4 анотації викликає сумність, як би виглядав еквівалентний XML-файл?
NimChimpsky

О, XML був би набагато гіршим :-)
Martijn Verburg

0
<annotation-driven />

Ви повинні вказати XML-схему, звідки вона походить.

Швидше за все, це в контексті стратегії обробки транзакцій JPA при визначенні диспетчера транзакцій (див. 9.5.6. Використання @Transactional у документах Spring)

Коли ви визначаєте обробку транзакцій, керовану комерційними повідомленнями, Spring AOP автоматично створює аспекти, щоб ваш метод запускав (або перевіряв наявну) транзакцію до виклику методу, а потім здійснював (або відмовлявся у випадку винятку) після закінчення методу ivokation.


0

Я виявив, що анотації на основі створення IoC / Bean зручні, коли у вас є одиночна реалізація, але, можливо, потрібно буде її замінити.

На відміну від ситуації, коли вам може знадобитися повторне використання квасолі з різними залежними класами / екземплярами.

У цих випадках я декларую боб у config і зазвичай роблю конструкторські ін'єкції незалежно від необхідності. Потім, у класі, який буде використовувати вказані бобові (я) я, @Autowireа потім @Qualifier("")- саме так, як передбачається, працюють фабрики.

Синглтон - це заводський метод, який повертає лише 1 результат. Коли це не зручно застосовувати, саме тоді вам потрібно це змішати.

Що стосується використання компонентного сканування порівняно з не, це дійсно підпорядковується вищевказаним критеріям та добре оцінюється. Я, як правило, дуже чітко стосується сканування компонентів пакету. Таким чином я можу створити інший контекст програми для тестування, де я можу висміяти зовнішні залежності (наприклад, db), а ще тестувати решту моєї настройки IoC.

Крім того, я не маю @Componentжодного коду бібліотеки у своєму проекті. Ви ніколи не знаєте, коли / як вам потрібно буде використовувати там боб, і якщо ви @Componentйого можете, ви можете випадково забрати його під час сканування і обмежите його повторне використання. Для цих випадків у бібліотеці я зазвичай визначаю контекст програми з деякими зручними за замовчуванням декларуваннями бобів, які мій основний проект CAN включив із імпортом у його контекст програми.

Тут немає ніякої релігії. Просто переживання для передачі


0

Весна пропонує варіанти, спочатку існувало лише електропроводка на основі xml. Пізніше було додано проводку на основі анотацій.
Зараз можна (і багато людей це роблять) використовувати суміш обох.
Існує велика документація, що додається до Весни та / або для завантаження з веб-сайту джерела джерела. Існує професійна підготовка (ніколи цього не робила, за неї не можна поручитися), і досить багато хороших книг (мені подобається APress 'Pro Spring, підберіть правильний випуск для версії Spring, яку ви використовуєте).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.