Do czego dokładnie służy Spring Framework? [Zamknięte]

623

Dużo słyszę o Springu , ludzie mówią w Internecie, że Spring to dobra platforma do tworzenia stron internetowych. Do czego dokładnie służy Spring Framework?

Maksim
źródło
10
Rozumiem, że pytanie jest bardzo ogólne, ale myślę, że w tym konkretnym przypadku pytanie jest bardzo ważne dla programistów junionów, którzy często mówią o Springu przez ludzi, którzy uważają, że jest on na tyle popularny, że nie trzeba nawet mówić, co to robi. W końcu podnieś rękę, jeśli nigdy nie słyszałeś o Instagramie i jaki jest jego cel ... (spowiedź: nigdy nie korzystałem z Insty)
usr-local-ΕΨΗΕΛΩΝ
2
Pytanie zadano 10 lat temu, a wówczas wiosna była nieco mniejsza niż teraz ze wszystkimi podprojektami, takimi jak Spring Boot, Spring Data, Spring Rest itp. I właśnie dlatego rok temu była bliższa, z powodu szerokość tego pytania. W chwili, gdy zadałem to pytanie, chciałem po prostu zrozumieć DI i dlaczego jest ono potrzebne.
Maksim

Odpowiedzi:

713

Zasadniczo wiosna jest ramą dla który jest wzorcem, który pozwala budować bardzo oddzielone systemy.

Problem

Załóżmy na przykład, że musisz wymienić użytkowników systemu, a tym samym zadeklarować interfejs o nazwie UserLister:

public interface UserLister {
    List<User> getUsers();
}

A może implementacja uzyskująca dostęp do bazy danych, aby uzyskać wszystkich użytkowników:

public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

Twoim zdaniem musisz uzyskać dostęp do instancji (pamiętaj tylko o przykładzie):

public class SomeView {
    private UserLister userLister;

    public void render() {
        List<User> users = userLister.getUsers();
        view.render(users);
    }
}

Zauważ, że powyższy kod nie zainicjował zmiennej userLister. Co powinniśmy zrobić? Jeśli jawnie utworzę instancję obiektu w ten sposób:

UserLister userLister = new UserListerDB();

... Połączę widok z moją implementacją klasy, która uzyskuje dostęp do bazy danych. Co jeśli chcę przełączyć się z implementacji DB na inną, która pobiera listę użytkowników z pliku oddzielonego przecinkami (pamiętaj, to przykład)? W takim przypadku chciałbym przejść do mojego kodu i zmienić powyższą linię na:

UserLister userLister = new UserListerCommaSeparatedFile();

Nie ma problemu z takim małym programem, ale ... Co dzieje się w programie, który ma setki widoków i podobną liczbę klas biznesowych? Utrzymanie staje się koszmarem!

Podejście Spring (Dependency Injection)

Spring polega na łączeniu klas za pomocą pliku XML lub adnotacji, w ten sposób wszystkie obiekty są tworzone i inicjowane przez Spring i wstrzykiwane we właściwe miejsca (serwlety, struktury sieciowe, klasy biznesowe, DAO itp. Itp.) ...)

Wracając do przykładu z Springa, potrzebujemy tylko setera dla userListerpola i pliku XML takiego jak ten:

<bean id="userLister" class="UserListerDB" />

<bean class="SomeView">
    <property name="userLister" ref="userLister" />
</bean>

lub, po prostu, adnotacje w naszej klasie widoku @Inject:

@Inject
private UserLister userLister;

W ten sposób, gdy widok zostanie utworzony, magicznie będzie UserListergotowy do pracy.

List<User> users = userLister.getUsers();  // This will actually work
                                           // without adding any line of code

To jest wspaniałe! Czyż nie

  • Co jeśli chcesz użyć innej implementacji swojego UserListerinterfejsu? Po prostu zmień XML.
  • Co jeśli nie masz UserListergotowej implementacji? Zaprogramuj tymczasową próbną implementację UserListerwidoku i ułatw jego rozwój.
  • Co jeśli nie chcę już używać Springa? Tylko tego nie używaj! Twoja aplikacja nie jest z nim powiązana. Odwrócenie stanów kontroli : „Aplikacja kontroluje platformę, a nie kontroluje aplikację”.

Istnieje kilka innych opcji dla Dependency Injection, które moim zdaniem sprawiły, że Spring jest tak sławny, poza prostotą, elegancją i stabilnością, że faceci z SpringSource zaprogramowali wiele POJO, które pomagają zintegrować Spring z wieloma innymi powszechnymi frameworkami bez bycia ingerujący w twoją aplikację. Ponadto Spring ma kilka dobrych podprojektów, takich jak Spring MVC, Spring WebFlow, Spring Security i ponownie długa lista etceteras.

Mam nadzieję że to pomoże. W każdym razie zachęcam do przeczytania artykułu Martina Fowlera o wstrzykiwaniu zależności i inwersji kontroli, ponieważ robi to lepiej niż ja. Po zrozumienia podstaw przyjrzeć wiosennym Dokumentacji , moim zdaniem, to jest wykorzystywane do być najlepszy Wiosna książka kiedykolwiek.

Wiktor Hugo
źródło
148
Jaka jest różnica między koniecznością zmiany wiersza kodu i wiersza XML? Wysiłek i piekło związane z konserwacją są dokładnie takie same, a nawet gorsze, ponieważ zewnętrzne pliki XML prawdopodobnie zwiększają złożoność? Przepraszam, ale po prostu nie rozumiem, nie widzę żadnych korzyści. Proszę o wypełnienie mnie, jeśli czegoś brakuje.
fred
23
@fred - Wyobraź sobie, że przeprowadzasz testy jednostkowe. Bez wstrzykiwania zależności (DI można używać z adnotacjami lub z XML) nie można poprawnie przetestować, ponieważ nie można kpić z zależności.
Petar Minchev
18
@fred - zdefiniowanie całego wstrzykiwania w XML rzeczywiście nie ma sensu. Utrzymanie tego jest ogromne. Dlatego EJB wprowadził pojęcie adnotacji dla punktów iniekcji. Są one znacznie prostsze i zostanie wstrzyknięta domyślna instancja (w przypadku testów jednostkowych można to zmienić raz). Działało to tak dobrze, że Spring skopiowało to podejście. Zauważ, że w razie potrzeby (ale tylko wtedy, gdy jest to naprawdę potrzebne) adnotacje mogą być zastąpione przez XML w EJB.
Mike Braun,
36
Lub, wiesz, użyj fabrycznej metody statycznej. Zmień typ zwrotu fabryki, a teraz wszystkie klasy, które używają tej wartości zwracanej, zostaną zmienione. Presto Wiosna nie jest już potrzebna ...
Qix - MONICA BYŁA SZYBKO ZADANA
16
@mmcrae Wolę wykonać jedno wywołanie refaktoryzacji w moim IDE niż pisać XML.
Qix - MONICA MISTREATED
63

Wiosna zawiera ( jak słusznie zauważył Skaffman ) framework MVC. Krótko mówiąc, oto moje uwagi. Wiosna obsługuje segregację warstwy usług, warstwy internetowej i warstwy biznesowej, ale to, co naprawdę robi najlepiej, to „wstrzykiwanie” obiektów. Aby to wyjaśnić na przykładzie, rozważ poniższy przykład:

public interface FourWheel
{
   public void drive();
}

public class Sedan implements FourWheel
{
   public void drive()
   {
      //drive gracefully
   }
}

public class SUV implements FourWheel
{
   public void drive()
   {
      //Rule the rough terrain
   }
}

Teraz w kodzie masz klasę o nazwie RoadTrip w następujący sposób

public class RoadTrip
{
    private FourWheel myCarForTrip;
}

Teraz, gdy chcesz instancję Trip; czasami możesz chcieć, aby SUV zainicjował FourWheel lub czasami możesz chcieć Sedana. To zależy od tego, czego chcesz, w zależności od konkretnej sytuacji.

Aby rozwiązać ten problem, chcesz mieć wzorzec fabryczny jako wzorzec kreacyjny. Gdzie fabryka zwraca właściwą instancję. Tak więc ostatecznie skończysz z dużą ilością kodu kleju, aby poprawnie utworzyć instancję obiektów. Wiosna najlepiej wykonuje kod kleju bez tego kodu. Deklarujesz odwzorowania w formacie XML, który automatycznie inicjuje obiekty. Dużo też robi przy użyciu architektury singleton dla instancji, co pomaga w zoptymalizowanym wykorzystaniu pamięci.

Jest to również nazywane Inwersją Kontroli. Inne ramy do tego celu to guice Google, kontener Pico itp.

Oprócz tego Spring ma strukturę sprawdzania poprawności, szerokie wsparcie dla warstwy DAO we współpracy z JDBC, iBatis i Hibernate (i wiele innych). Zapewnia doskonałą kontrolę transakcyjną transakcji w bazie danych.

Spring ma o wiele więcej do powiedzenia w dobrych książkach, takich jak „Pro Spring”.

Pomocne mogą być także następujące adresy URL.
http://static.springframework.org/docs/Spring-MVC-step-by-step/
http://en.wikipedia.org/wiki/Spring_Framework
http://www.theserverside.com/tt/articles/article .tss? l = SpringFramework

Priyank
źródło
5
Wiosna zawiera framework MVC. Ale to o wiele, wiele więcej.
skaffman
Nie chcąc za bardzo naciągać, WebMVC jest częścią podstawowej dystrybucji sprężyn. Webflow, RCP i in. Nie są.
skaffman
1
Fajnie , nie wiedziałem, że możesz tworzyć instancję obiektów typu Interfejs w Javie - co jest nielegalne @skaffman pomóż mi zrozumieć tę odpowiedź (patrz Instancja FourWheel)
Calderon
47

Stare dzień, wiosna była praca zależność wtrysk tylko jak rama ( Guice , PicoContainer , ...), ale w dzisiejszych czasach jest to kompletne rozwiązanie do budowania aplikacji korporacyjnych .

Zastrzyk uzależnienia od wiosny, który jest oczywiście sercem wiosny, nadal istnieje (i możesz przejrzeć inne dobre odpowiedzi tutaj), ale jest więcej od wiosny ...

Wiosna ma teraz wiele projektów, każdy z pewnymi podprojektami ( http://spring.io/projects ). Kiedy ktoś mówi o wiośnie, musisz dowiedzieć się, o czym mówi projekt wiosenny , czy jest to tylko rdzeń wiosenny, który jest znany jako szkielet wiosenny , czy to kolejne projekty wiosenne.

Niektóre projekty wiosenne, o których również warto wspomnieć, to:

Jeśli potrzebujesz dodatkowej funkcji dla swojej aplikacji, możesz ją również tam znaleźć:

  • Struktura wsadowa Spring Batch zaprojektowana w celu umożliwienia rozwoju
    aplikacji wsadowej
  • Wiosna HATEOAS łatwe tworzenie API REST w oparciu o zasadę HATEOAS
  • Spring Mobile i Spring Andriod do tworzenia aplikacji mobilnych
  • Spring Shell tworzy w pełni funkcjonalną aplikację powłoki (znaną również jako wiersz poleceń)
  • Przepływ danych Spring Cloud i Spring Cloud dla aplikacji w chmurze

Są tam również małe projekty, na przykład wiosenno-społeczny-facebook ( http://projects.spring.io/spring-social-facebook/ )

Możesz użyć Spring do tworzenia stron internetowych, ponieważ ma Spring MVCmoduł, który jest częścią projektu Spring Framework . Lub możesz użyć spring z innym frameworkiem internetowym, takim jak struts2 .

Alireza Fattahi
źródło
1
Tak naprawdę chciałbym, aby mvc, data, jpa i inne części Spring miały opcję nieużywania rdzenia DI sprężyny, ale zamiast tego umieściły Sztylet w sercu Wiosny.
dlamblin
25

Po co jest wiosna? Odpowiem krótko na to pytanie, ale najpierw spójrzmy na przykład przez Victora Hugo. To nie jest świetny przykład, ponieważ nie uzasadnia potrzeby nowego frameworka.

public class BaseView {
  protected UserLister userLister;

  public BaseView() {
    userLister = new UserListerDB(); // only line of code that needs changing
  }
}

public class SomeView extends BaseView {
  public SomeView() {
    super();
  }

  public void render() {
    List<User> users = userLister.getUsers();
    view.render(users);
  }
}

Gotowy! Więc teraz, nawet jeśli masz setki lub tysiące widoków, nadal musisz tylko zmienić jeden wiersz kodu, tak jak w podejściu Spring XML. Ale zmiana wiersza kodu nadal wymaga ponownej kompilacji, a nie edytowanej wersji XML? Cóż, mój wybredny przyjacielu, użyj Anta i skryptu!

Więc po co jest Wiosna? To dla:

  1. Niewidomi programiści, którzy śledzą stado
  2. Pracodawcy, którzy nigdy nie chcą zatrudniać absolwentów programistów, ponieważ nie uczą takich ram w Uni
  3. Projekty, które zaczęły się od złego projektu i wymagają patchworku (jak pokazuje przykład Victora Hugo)

Dalsza lektura: http://discuss.joelonsoftware.com/?joel.3.219431.12

Popiół
źródło
11
Pomijając frustrację, zastanawiam się nad waszymi argumentami. Nie znam żadnego narzędzia programistycznego, którego nie można użyć do stworzenia złego projektu. Naszym celem jest to, że używając frameworków możesz sprawić, że zły kod zrobi wiele rzeczy. Jest to uniwersalna prawda i nie jest specyficzna dla wiosny. W przeciwnym razie o co chodzi? Czy nie sądzisz, że kompetentni programiści mogą w pełni wykorzystać to, co ma do zaoferowania Spring? Przynajmniej jestem pewien, że nie sugerujesz, że żaden programista Spring nigdy nie słyszał o rozszerzaniu klas. Jednak dalsze czytanie jest przezabawne.
sthzg
2
Co więcej, twój przykład działa, ponieważ widok potrzebuje tylko jednej wstrzykniętej usługi ( UserLister), ale co, jeśli potrzebuje kilku usług, które nie są współużytkowane przez różne BaseViewdzieci? Na szczęście w Javie nie ma wielokrotnego dziedziczenia.
Edouard Berthe
@EdouardBerthe Fair point. Moja odpowiedź nie była próbą zignorowania DI, wskazuje tylko, że przykład pokazany w zaakceptowanej odpowiedzi nie jest najlepszy; proponowany scenariusz najprawdopodobniej zadziałałby lepiej. Chodzi mi o to, że nie potrzebuję DI, ale raczej nie potrzebujesz do tego całego frameworka.
Ash
19

Podsumowując, powiem, że wiosna jest „klejem” w twojej aplikacji. Służy do integracji różnych frameworków i własnego kodu.

Johan
źródło
15

Wiosna to trzy rzeczy.

  1. Wiosna obsługuje Dependency Injection i polecam przeczytać doskonałe wprowadzenie Martina Fowlera na temat wstrzykiwania zależności.
  2. Drugą rzeczą, jaką robi Spring, jest pakowanie doskonałych bibliotek Java w bardzo elegancki sposób do wykorzystania w aplikacjach. Dla dobrego przykładu zobacz, jak Spring otacza Executory zadań i harmonogram kwarcowy.
  3. Po trzecie, Spring oferuje szereg implementacji rzeczy internetowych, takich jak REST, framework internetowy MVC i wiele innych. Liczą się, ponieważ używasz Springa przez pierwsze dwa, być może możesz go użyć do wszystkiego, czego potrzebuje twoja aplikacja internetowa.

Problem polega na tym, że Spring DI jest naprawdę dobrze przemyślany, owijki wokół innych rzeczy są naprawdę dobrze przemyślane, ponieważ inne rzeczy przemyślały wszystko, a Spring po prostu ładnie je owija. Wiosenne implementacje MVC i REST i wszystkie inne rzeczy nie są tak dobrze zrobione (YMMV, IMHO), ale są wyjątki (Spring Security to da bomb). Dlatego używam Spring do DI i jego fajnych opakowań, ale wolę inne rzeczy do Internetu (bardzo lubię Tapestry), REST (Jersey jest naprawdę solidny) itp.

karstensrage
źródło
9
YMMV, IMHO - Twój przebieg może się różnić, w mojej skromnej opinii dla tych z was, którzy nie znają skrótów takich jak ja ...
Sakamoto Kazuma
11

Czego prawdopodobnie potrzebujesz w aplikacji sieci Web ze Spring -

  • Spring MVC, który w wersji 2.5+ pozwala używać POJO jako klas kontrolerów, co oznacza, że ​​nie musisz rozszerzać się z żadnego konkretnego frameworka (jak w Struts lub Spring przed 2.5). Klasy kontrolerów są również bardzo proste do przetestowania, częściowo dzięki wstrzyknięciu zależności
  • Wiosenna integracja z Hibernacją, która dobrze upraszcza pracę z tym rozwiązaniem ORM (w większości przypadków)
  • Użycie Springa do aplikacji sieciowej umożliwia korzystanie z obiektów domeny na wszystkich poziomach aplikacji - te same klasy, które są mapowane przy użyciu Hibernacji, są klasami używanymi jako „form bean”. Z natury doprowadzi to do stworzenia solidniejszego modelu domeny, po części dlatego, że ograniczy liczbę klas.
  • Wiosenne tagi formularzy ułatwiają tworzenie formularzy bez większych problemów.

Ponadto Spring jest OGROMNY - więc istnieje wiele innych rzeczy, które mogą Cię zainteresować w aplikacji internetowej, takich jak Spring AOP lub Spring Security. Ale cztery rzeczy wymienione powyżej opisują typowe komponenty Spring, które są używane w aplikacji internetowej.

bpapa
źródło
9

Widzę w tym dwie części:

  1. „Czym dokładnie jest wiosna” -> zobacz zaakceptowaną odpowiedź zwycięzcy hugo.
  2. „[...] Wiosna to [a] dobre środowisko do tworzenia stron internetowych” -> ludzie mówią, że mówią o Spring MVC. Spring MVC jest jedną z wielu części Springa i jest platformą internetową wykorzystującą ogólne funkcje Springa, takie jak wstrzykiwanie zależności. Jest to dość ogólna struktura, ponieważ jest bardzo konfigurowalna: możesz używać różnych warstw db (Hibernacja, iBatis, zwykły JDBC), różnych warstw widoku (JSP, Velocity, Freemarker ...)

Pamiętaj, że możesz doskonale używać Springa w aplikacji internetowej bez użycia Spring MVC. Powiedziałbym, że większość aplikacji internetowych Java to robi, korzystając z innych struktur internetowych, takich jak Wicket, Struts, Seam, ...

Tom De Leu
źródło
8

Wiosna jest świetna do sklejania wystąpień klas. Wiesz, że twoje klasy Hibernacji zawsze będą potrzebowały źródła danych, Spring łączy je ze sobą (i ma również implementację źródła danych).

Twoje obiekty dostępu do danych zawsze będą wymagały dostępu Hibernacji, Spring łączy klasy Hibernacji z Twoimi DAO dla Ciebie.

Dodatkowo Spring w zasadzie daje ci solidne konfiguracje wielu bibliotek, a tym samym daje ci wskazówki co do bibliotek, których powinieneś używać.

Wiosna to naprawdę świetne narzędzie. (Nie mówiłem o Spring MVC, tylko o podstawowym frameworku).

stevedbrown
źródło
5

Akceptowana odpowiedź nie obejmuje użycia adnotacji, ponieważ Spring wprowadził obsługę różnych adnotacji do konfiguracji.

Podejście Spring (Dependency Injection)

Istnieje inny sposób połączenia klas za pomocą pliku XML: adnotacje. Użyjmy przykładu z przyjętą odpowiedzi i zarejestrować fasolkę bezpośrednio na klasy, stosując jedną z adnotacji @Component, @Service, @Repositorylub @Configuration:

@Component
public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

W ten sposób, gdy widok zostanie utworzony, magicznie będzie miał UserLister gotowy do pracy.

Powyższe oświadczenie jest ważne z niewielką premią za brak potrzeby użycia pliku XML i okablowania z inną adnotacją, @Autowiredktóra znajduje odpowiednią implementację i wprowadza ją.

@Autowired
private UserLister userLister;

Użyj @Beanadnotacji do metody użytej do wprowadzenia implementacji komponentu bean do wstrzyknięcia.

Nikolas
źródło
Źle. Nie można używać @Beanadnotacji na poziomie klasy. Musi być jednym z @Component, @Service, @Repositoryitd. Reszta jest prawidłowe. Powinieneś także zauważyć, że w ten sposób automatyczne okablowanie będzie działało tylko wtedy, gdy w ścieżce klasy będzie tylko 1 klasa kandydująca odpowiednia do wstrzyknięcia, w przeciwnym razie wystąpi błąd aplikacji wiosennej.
Stefano L
@StefanoL: Tak, masz rację. Zastanawiam się, że ludzie zignorowali mój błąd. Dziękuję za komentarz.
Nikolas
4

Zaletą jest Dependency Injection (DI) . Oznacza to outsourcing zadania tworzenia obiektów. Pozwól mi wyjaśnić na przykładzie.

public interface Lunch
{
   public void eat();
}

public class Buffet implements Lunch
{
   public void eat()
   {
      // Eat as much as you can 
   }
}

public class Plated implements Lunch
{
   public void eat()
   {
      // Eat a limited portion
   }
}

Teraz w moim kodzie mam klasę LunchDecide w następujący sposób:

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(){
        this.todaysLunch = new Buffet(); // choose Buffet -> eat as much as you want
        //this.todaysLunch = new Plated(); // choose Plated -> eat a limited portion 
    }
}

W powyższej klasie, w zależności od naszego nastroju, wybieramy Buffet () lub Plated (). Jednak ten system jest ściśle powiązany. Za każdym razem, gdy potrzebujemy innego typu obiektu, musimy zmienić kod. W takim przypadku komentowanie linii! Wyobraź sobie, że istnieje 50 różnych klas używanych przez 50 różnych osób. To byłby straszny bałagan. W takim przypadku musimy odłączyć system. Przepisajmy klasę LunchDecide.

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(Lunch todaysLunch){
        this.todaysLunch = todaysLunch
        }
    }

Zauważ, że zamiast tworzyć obiekt za pomocą nowego słowa kluczowego przekazaliśmy referencję do obiektu typu lunchu jako parametr do naszego konstruktora. Tutaj tworzenie obiektów jest zlecane na zewnątrz. Kod ten można podłączyć za pomocą pliku konfiguracyjnego Xml (starsza wersja) lub Adnotacji Java (nowoczesna). Tak czy inaczej, decyzja o tym, jaki typ obiektu zostanie utworzony, byłaby podejmowana w czasie wykonywania. Obiekt byłby wstrzykiwany przez Xml do naszego kodu - nasz Kod jest zależny od Xml dla tego zadania. Stąd wstrzykiwanie zależności (DI). DI nie tylko pomaga w luźnym sprzężeniu naszego systemu, ale także upraszcza pisanie testów jednostkowych, ponieważ pozwala na kpiny z zależności. Wreszcie, DI usprawnia programowanie zorientowane na aspekty (AOP), co prowadzi do dalszego oddzielania i zwiększania modułowości. Zauważ też, że powyżej DI jest wstrzykiwanie konstruktora.

Sumit Pokhrel
źródło
Ale nawet w przypadku wiosny nadal będziemy definiować fasolę. a identyfikator fasoli zostanie podany w kodzie, prawda? więc jeśli jutro zmienisz fasolę, nadal musisz zmienić kod, prawda? więc jaka jest korzyść.
Arpan Buch
@ArpanBuch Myślę, że zaletą wiosny jest to, że możesz wybrać inną implementację bez ponownej kompilacji kodu (o ile inna implementacja już istnieje). Jestem początkującym, więc mogę się mylić.
byxor
4
  • Wiosna to lekka i elastyczna konstrukcja w porównaniu do J2EE.
  • Kontener sprężynowy działa jak odwrócenie kontroli.
  • Wiosna wykorzystuje AOP, tj. Proxy i wzorce Singleton, Factory i Szablon Method Method.
  • Wielowarstwowe architektury: rozdzielenie problemów i warstw wielokrotnego użytku oraz łatwa konserwacja.

wprowadź opis zdjęcia tutaj

Premraj
źródło
1
Spring Framework help you with several things like, don't reinvent the wheel. you can connect very easily with some database just using Spring Data, or create schedule tasks like CronJob or Windows Task. amazing !
tomj0101
3

Wiosna jest dobrą alternatywą dla technologii Enterprise JavaBeans (EJB) . Posiada również komponent frameworka sieciowego i frameworka usług internetowych.

fastcodejava
źródło
1
Czy mogę to poprawić? Była alternatywą dla (okropnego) EJB 2 ... wydaje się, że „nowy EJB” (częściowo JPA 2 itd.) Ma akceptację rowkowania. „Happy hours” części wiosennej „rodzaj EJB” wydaje się już przeszłością. ad 2015
Jacek Cz
1

Wiosna zaczęła się jako dość prosty system wstrzykiwania zależności. Teraz jest ogromny i ma w nim wszystko (oprócz przysłowiowego zlewu kuchennego).

Ale nie bój się, jest dość modułowy, dzięki czemu możesz używać tylko tych elementów, które chcesz.

Aby zobaczyć, gdzie to wszystko się zaczęło, spróbuj:

http://www.amazon.com/Expert-One-Design-Development-Programmer/dp/0764543857/ref=sr_1_1?ie=UTF8&s=books&qid=1246374863&sr=1-1

To może być stara, ale jest to doskonała książka.

Kolejna dobra książka, tym razem poświęcona wyłącznie wiośnie, patrz:

http://www.amazon.com/Professional-Java-Development-Spring-Framework/dp/0764574833/ref=sr_1_2?ie=UTF8&s=books&qid=1246374863&sr=1-2

Odwołuje się także do starszych wersji Spring, ale zdecydowanie warto na nie spojrzeć.

Pablojim
źródło
1

Wiosna na początku była zastrzykiem zależności, a następnie dodawała króla owijarek do prawie wszystkiego (opakowanie do implementacji JPA itp.).

Długa historia ... większość części Spring preferuje rozwiązania XML (silnik skryptów XML ... brrrr), więc do DI używam Guice

Dobra biblioteka, ale z rosnącym Depnedenciec, na przykład Spring JDBC (może jedno rozwiązanie Java JDBC z parametrami prawdziwych nazw) bierze od maven 4-5.

Używając Spring MVC (część „wielkiej wiosny”) do tworzenia stron internetowych ... jest to framework oparty na „żądaniach”, istnieje prośba o wojnę świętą kontra komponent… ... zależy od Ciebie

Jacek Cz
źródło
1
Wierzę, że teraz framework Spring próbuje odejść od XML do Adnotacji i konfiguracji Java.
Maksim
0

W przeszłości myślałem o frameworku Spring z czysto technicznego punktu widzenia.

Biorąc pod uwagę pewne doświadczenie w pracy zespołowej i tworzeniu korporacyjnych aplikacji internetowych - powiedziałbym, że Spring służy szybszemu tworzeniu aplikacji (aplikacji internetowych) poprzez oddzielenie poszczególnych elementów (komponentów). Szybszy rozwój sprawia, że ​​jest tak popularny. Sprężyna umożliwia przeniesienie odpowiedzialności za budowanie (podłączanie) aplikacji na platformę Spring. Zastrzyk zależności środowiska Spring jest odpowiedzialne za podłączanie / podłączanie poszczególnych ziaren do działającej aplikacji.

W ten sposób programiści mogą bardziej skoncentrować się na rozwoju poszczególnych komponentów (ziaren), gdy tylko zdefiniowane zostaną interfejsy między ziarenkami.

Testowanie takiej aplikacji jest łatwe - główny nacisk kładziony jest na poszczególne ziarna. Można je łatwo oddzielić i wyśmiewać, dzięki czemu testy jednostkowe są szybkie i wydajne.

Framework Spring definiuje wiele wyspecjalizowanych komponentów bean, takich jak @Controller ( @Restcontroller ), @Repository , @Component do celów internetowych. Wiosna wraz z Maven zapewniają intuicyjną strukturę dla programistów. Praca zespołowa jest łatwa i szybka, ponieważ poszczególne elementy są rozdzielone i można je ponownie wykorzystać.

Witold Kaczurba
źródło
0

Platforma Spring jest zdecydowanie dobra dla tworzenia stron internetowych i bardziej specyficzna dla spokojnych usług interfejsu API.

Jest dobry na powyższe ze względu na iniekcję zależności i integrację z innymi modułami, takimi jak Spring Security , Spring Aop , Framework Mvc , Microservices

W każdej aplikacji bezpieczeństwo jest najprawdopodobniej wymogiem.
Jeśli chcesz zbudować produkt, który wymaga długiej konserwacji, będziesz potrzebować koncepcji Aop.

Jeśli Twoja aplikacja ma duży ruch, co zwiększa obciążenie, musisz skorzystać z koncepcji mikrousług.

Spring udostępnia wszystkie te funkcje na jednej platformie. Obsługa wielu modułów .
Co najważniejsze, wiosna jest oprogramowaniem typu open source i rozszerzalnym frameworkiem, wszędzie jest haczyk umożliwiający integrację niestandardowego kodu w cyklu życia.

Spring Data to jeden projekt, który zapewnia integrację z Twoim projektem.


Dzięki temu sprężyna zmieści się w prawie każdym wymaganiu.

pratik deshai
źródło