2016-02-02 20 views
7

Obecnie jestem w trakcie dodawania Spring i Hibernate do istniejącej aplikacji, ale po przeczytaniu wielu tutoriali wciąż jest para (aka wielu rzeczy) która wydaje się dziwna dla mnie lub czegoś brakuje ...Wiosna - Poradniki kontra prawdziwe życie

Wszystkie tutoriale, które znalazłem, są proste (jak większość tutoriali powinna być), jak widać na Przykład A, jeden kontroler do obsługi żądań (JSP lub WS) i autowirować klasę menedżera, aby wejść w interakcję z bazą danych.

W moim przypadku nie ma to zastosowania, ponieważ aplikacja ma klasę do obsługi żądań, następnie tworzy instancję klasy obsługi, która z kolei tworzy nową klasę do obsługi czegoś innego, co tworzy nową klasę do obsługi (....) *, a następnie obsługuje połączenie z bazą danych, jak widać na Przykład B.

Spring diagram - Tutorial vs Real life

Moje pytanie brzmi: w jaki sposób mogę zrobić mój logiki biznesowej klasy N"Springable", tj stanie dokonać Manager Database autowired wewnątrz niego?

Od wszystkich przykładów, które widziałem, mam wymyślić tych alternatyw:

  1. Tworzenie autowire do ALL z DbManager wewnątrz kontrolera, a następnie IoC wszystkim gospodarka Klasy, aż osiągną klasę Business Logic n. Ten pójdzie z normami wiosny, ale oznaczałoby najwięcej kodu Refaktoryzacja
  2. Transform WSZYSTKIE klasach logiki biznesowej w fasoli
  3. Dodaj SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext (this); do klasy Business Logic n i używać @Autowire aby uzyskać dostęp do DbManager

Am I czegoś brakuje lub jest jakaś inna alternatywa?

+1

Moim zdaniem najlepszym (lub właściwym) podejściem byłoby alternatywa 2. Przekształcenie wszystkich logiki biznesowej i klas dostępu do danych w fasole szparagowe ('@ Service' i' Repository') i zamiast tworzenia instancji w kod, skonfiguruj sprężynę, aby wstrzyknąć te ziarna, gdy jest to konieczne. Możesz użyć znacznika 'component-scan' zamiast obszernego XML, aby uświadomić i opanować te fasole. –

Odpowiedz

1

To tylko moja opinia, ale możesz być zainteresowany.

Podstawową filozofią wiosny jest fakt, że tworzenie i konfiguracja obiektów uczestniczących w kontenerze, ale nie w obiektach biznesowych, nosi nazwę IoC lub Injection Dependency Injection. Na podstawie konfiguracji kontener tworzy i łączy (wstrzykuje) obiekty ze sobą. Pozwala to na usunięcie kodu klas biznesowych związanych z tworzeniem instancji i konfiguracją (kod ten może być dość złożony). Więc twoje zajęcia staną się łatwiejsze i czystsze, i mogą skupić się na logice biznesowej i niczym więcej.

Uważam, że obiekty biznesowe nie muszą się nawzajem tworzyć. Niech Spring to zrobi. Robi to doskonale.

zaznaczyć tylko jedno klas logiki biznesowej, zależy od jego roli jednego z stereotypu: @Component, @Service, @Controller (znaczenie stereotypów można znaleźć here) i wstrzyknąć go @Autowired. A jeśli potrzebujesz Database Manager w tych klasach, wstrzyknij to w ten sam sposób.

Więc mój wybór odpowiada punkt numer dwa: „2. Transform wszystkie klasy logiki biznesowej w ziarnach ...”