Wiosna - zamieszanie związane z konfiguracją?

9

Gdzieś czytałem, że Spring oferuje wygodę w porównaniu z konfiguracją. Ale ludzie z Spring wprowadzają tak wiele zmian w konfiguracji, że teraz jestem naprawdę zdezorientowany, jeśli chodzi o użycie konfiguracji xml lub adnotacji.

Chciałbym, aby ktokolwiek zasugerował pewną metodologię lub praktyczną zasadę przy użyciu XML i adnotacji.


Przykłady w SO pokazują, że wielu początkujących, takich jak ja, jest zdezorientowanych konfiguracją.

  • link-1

    Wydaje mi się, że nie rozumiem funkcjonalności <context:annotation-config>i <context:component-scan>.

    Z tego, co przeczytałem, wydaje się, że obsługują różne adnotacje (@Required, @Autowired itp. Vs @Component, @Repository, @Service itp.), Ale także z tego, co przeczytałem, rejestrują te same klasy postprocesora komponentu bean.

    Żeby mnie jeszcze bardziej zdezorientować, istnieje annotation-configatrybut na <context:component-scan>...

  • link 2

    Nadal mam tag skanowania komponentu:

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

    ale mam też inny tag (wyglądający jak podobne zadanie), ten:

    <annotation-driven />

    Jaka jest różnica między tymi dwoma tagami? Inną „dziwną” rzeczą jest to, że poprzedni przykład (który nie używa znacznika opartego na adnotacjach) jest bardzo podobny do projektu utworzonego przez STS przy użyciu projektu szablonu Spring MVC, ale jeśli usunę znacznik oparty na adnotacjach z jego konfiguracji plik projekt nie działa i wyświetla mi następujący błąd: HTTP Status 404 - ...

Spring 3.2 nie potrzebuje już cglib do proxy, ale niższe wersje używają cglib. Cytat z bloga springsource

Aby wygenerować takie proxy, Spring używa biblioteki innej firmy o nazwie cglib. Niestety ten projekt nie jest już aktywny. Wiosną 3.2 jest bardzo prawdopodobne, że Spring będzie domyślnie używać Javassist.

Czy to wystarczy, aby zasugerować, że Wiosna jest zamieszaniem w kwestii konfiguracji?

Społeczność
źródło
1
„Wiosenni ludzie wprowadzają tak wiele zmian w konfiguracji” - czy możesz podać przykład? Pomoże to czytelnikom lepiej zrozumieć twój problem i odpowiedzieć na twoje pytanie
komnata
9
Pytanie nie jest zbyt dobre, ale tytuł z pewnością jest zabawny.
Florian Margaine
1
@gnat, ucząc się wiosny, przeszukiwałem Internet i natrafiłem na te same rzeczy wyrażone na wiele różnych sposobów. wiosenna dokumentacja mówi o jednym sposobie robienia rzeczy, niektóre samouczki mówią o innym sposobie, oba są prawidłowe, krzywa uczenia się jest tak wysoka. Moje jedyne pytanie brzmi… czy jest jakaś przejrzysta dokumentacja, która pokazuje wszystkie możliwe sposoby robienia jednej rzeczy wiosną ?
1
@tito pytanie, które podajesz w komentarzach „czy jest jakaś dokumentacja”, brzmi jak żądanie zasobów. Żądania zasobów nie są mile widziane u programistów . O ile rozumiem, wolałbym zamiast tego przedstawić podstawowy problem (o ile widzę, właśnie to zrobiłeś w pytaniu tekstowym, „myląc się w użyciu”) - problem, który miał zostać rozwiązany z konkretnym żądanym zasobem
komar
2
@tito Myślę, że twoim problemem jest mieszanie starych samouczków z nową dokumentacją. Wiosna stała się bardzo „konwencją w sprawie konfiguracji”, w której nie trzeba wyrażać tyle, co wcześniej. Jednak stare samouczki (zwłaszcza wcześniejsze niż 3.1) zawierają wiele rzeczy, które są teraz niepotrzebne.
Matsemann,

Odpowiedzi:

5

Wiosna ma na celu zapewnienie ram, w których istnieje „konwencja w sprawie konfiguracji”. Jednak w rzeczywistości aplikacje Spring wymagają pewnej konfiguracji.

We Spring 2.5.x i wcześniejszych wersjach powszechnym idiomem było zapewnienie tej konfiguracji przez XML. W Spring 3.0+ idiomatycznym sposobem jest stosowanie adnotacji (coś, co zachęca także Java EE6 / 7).

Na marginesie, może być zabawne (zasmucenie?) Zobaczyć jednostkę JPA z adnotacjami, raczej łatwo jest dodać adnotacje 4+ w jednym polu ...

Martijn Verburg
źródło
poziom potrzebnych konfiguracji wykroczył poza zasięg małego programisty, takiego jak ja, który musi pogodzić się z liczbą N frameworków, aby wykonać projekt.
1
Mam metody z dziesięcioma adnotacjami, z których każda ma inną przydatną funkcję…
Donal Fellows
1
Z drugiej strony istnieje także możliwość posiadania jednostki JPA z pojedynczą adnotacją @Entity w klasie i niczym więcej. Jeśli nie jest to konwencja dotycząca konfiguracji, nie wiem, co to jest. Jeśli czujesz potrzebę, aby wszystko działało dokładnie tak, jak chcesz, nie narzekaj, że kończysz na dużej konfiguracji - ciesz się, że w ogóle jest to możliwe.
Michael Borgwardt,
2
Nie rozumiem, dlaczego 4 annoacje sprawiają, że jesteś smutny, jak wyglądałby równoważny plik XML?
NimChimpsky
Och, XML byłby o wiele, znacznie gorszy :-)
Martijn Verburg,
0
<annotation-driven />

Musisz określić schemat XML, skąd pochodzi.

Najprawdopodobniej jest to w kontekście strategii obsługi transakcji JPA podczas definiowania menedżera transakcji (patrz 9.5.6. Korzystanie z @Transactional w dokumentach Springa)

Po zdefiniowaniu obsługi transakcji opartej na adnotacjach - Spring AOP automatycznie tworzy aspekty dla twojej metody, aby rozpocząć (lub sprawdzić istniejącą) transakcję przed wywołaniem metody, a następnie zatwierdzić (lub wycofać w przypadku wyjątku) po zakończeniu ivokacji metody.

Zilvinas
źródło
0

Odkryłem, że tworzenie IoC / Bean oparte na adnotacjach jest przydatne, gdy masz implementację singleton, ale może zajść potrzeba jej zamiany.

W przeciwieństwie do sytuacji, w której może być konieczne wielokrotne użycie fasoli z różnymi zależnymi klasami / instancjami.

W takich przypadkach deklaruję komponent bean w konfiguracji i zwykle wykonuję wstrzyknięcie konstruktora jakiejkolwiek zależności, której potrzebuję. Następnie, w klasie, która będzie używać wspomnianej fasoli, ja, @Autowirea następnie @Qualifier("")- tak powinny działać fabryki.

Singleton to metoda fabryczna, która zwraca tylko 1 wynik. Kiedy to nie jest wygodne, musisz to pomieszać.

Jeśli chodzi o użycie skanu komponentów vs. Zasadniczo wyrażam się jasno na temat skanowania komponentów pakietu. W ten sposób mogę stworzyć inny kontekst aplikacji do testowania, w którym mogę wyśmiewać zewnętrzne zależności (np. Db), jednocześnie testując resztę mojej konfiguracji IoC.

Ponadto nie mam @Componentkodu biblioteki w moim projekcie. Nigdy nie wiesz, kiedy / jak będziesz musiał użyć tam fasoli, a jeśli @Componenttak, możesz przypadkowo podnieść ją w skanie i ograniczyć jej ponowne użycie. W takich przypadkach ogólnie mam kontekst aplikacji zdefiniowany w bibliotece z kilkoma przydatnymi domyślnymi deklaracjami komponentu bean, które mój główny projekt MOŻE uwzględnić w imporcie do swojego kontekstu aplikacji.

Żadna religia tutaj. Po prostu doświadczenia do przekazania

Christian Bongiorno
źródło
0

Spring oferuje opcje, pierwotnie było tylko okablowanie oparte na XML. Później dodano okablowanie oparte na adnotacjach.
Jest teraz możliwe (i wiele osób to robi), aby użyć kombinacji obu.
Istnieje duża dokumentacja dołączona do Spring i / lub do pobrania ze strony internetowej springsource. Jest profesjonalne szkolenie (nigdy tego nie zrobiłem, nie mogę za niego ręczyć) i całkiem sporo dobrych książek (lubię APress 'Pro Spring, wybierz odpowiednią wersję dla wersji Spring, którą zatrudniasz).

jwenting
źródło