Co to jest Spring?

Pytanie może wydać się banalne, ale wcale takowym nie jest. Można szybko odpowiedzieć, iż jest to framework aplikacji dla platformy J2EE. Zgoda, ale nie tylko.

Zacznę jednakże od początku – skąd nagle Spring na blogu? Jak do tej pory nie przyszedł na niego jeszcze czas, choć moment ten nadchodzi. Kończąc pisanie ProgramBash rozpocząłem mały research dotyczący następnego projektu. I co do jednego jestem pewien – powstanie on z użyciem właśnie Springa. Pozostałe biblioteki/frameworki/technologie na razie są niedookreślone – dlatego by odpocząć na chwilkę od kodowania postanowiłem przybliżyć dziś chyba najpopularniejszy obecnie framework w świecie Javy.

Dawno temu, mniej więcej w okolicach roku 2002 tworzenie aplikacji webowych dla Javy było dość nieprzyjemne. Dominującym paradygmatem był EJB 2, a o toporności tego narzędzia do dziś krążą legendy. Powstała wtedy książka “J2EE Design and Development” niejakiego pana Roda Johnsona. Korzystając ze swego doświadczenia napisał w niej co mu się nie podoba w J2EE i co wypadałoby z tym zrobić. W książce pojawił się również kod, którym autor wspomagał swój wywód. Geniuszu chyba potrzeba by z pomocniczego kodu w książce o J2EE powstał Spring w takiej formie w jakiej go dziś znamy. Rzecz jasna trochę to trwało, po drodze również doszło do pewnych przetasowań oraz zmian. Zainteresowanych odsyłam do Wikipedii.

Spring jest narzędziem kompleksowym. Zasadniczo możemy używać tylko jego bazowej funkcjonalności – czyli specyficznego powiązania obiektów w aplikacji zwanym Inversion of Control (w skrócie IoC). W podejściu tym (traktowanym też często jako wzorzec projektowy lub paradygmat tworzenia oprogramowania) przekazuje się sterowanie częścią funkcjonalności na zewnątrz (w sensie poza). I tutaj przykładem jest Dependency Injection czyli wstrzykiwanie zależności. Przy pierwszym poznaniu Springa wygląda to jak wyciąganie obiektów z kapelusza, jednakże po pewnym czasie taki sposób tworzenia kodu staje się tak oczywisty i naturalny, iż trudno przerzucić się na coś innego.

Obok IOC dumnie kroczy inny zawodnik – programowanie aspektowe. Można je scharakteryzować bardzo obrazowo jako delegację pewnych czynności na zewnątrz obiektu, gdzie informację o tym jak i gdzie stosować konkretne czynności możemy sobie oprogramować sami. Podręcznikowym przykładem programowania aspektowego jest np. zapewnienie transakcyjności operacji bankowych. Innymi słowy – wszystkie akcje na koncie bankowym (obciążenie, wpłaty, lokaty) są realizowane przez logikę biznesową, jednakże sprawami występującymi w każdej z tych operacji (np. logowanie i uwierzytelnianie) zajmuje się kod zupełnie z daną logiką biznesową niepowiązany. Chyba trochę zagmatwałem, ale na przykładach w tworzonym projekcie bardzo łatwo da się rzecz wytłumaczyć.

Trzecią rzeczą, która jest cudowna w Springu to w końcu implementacja MVC z prawdziwego zdarzenia. Konkretnie chodzi mi o warstwę kontrolera, gdyż w JSF zasadniczo to nie wyglądało. W przypadku tego frameworka mamy klasy kontrolera, które obsługują nadchodzące requesty i wyświetlają odpowiedź. Po drodze zaś możemy z żądaniem zrobić co się nam podoba – obejrzeć, przetworzyć, zwalidować, zapisać w bazie i potem coś jeszcze wyświetlić. Całość nazywa się niezbyt oryginalnie Spring MVC i bardzo mi się spodobała od samego początku.

Opisałem trzy podstawowe (i moim zdaniem najistotniejsze) rzeczy w bibliotece. Z tego co wyczytałem w sieci, najlepszą książką dotyczącą Springa jest ta pozycja, jak zawsze niezastąpionego wydawnictwo Manning. Tutoriale na sieci są również całkiem niezłe, ale jak zawsze najlepszym będzie ten, który powstanie na blogu 🙂 Stay tuned.

Advertisements

11 thoughts on “Co to jest Spring?

  1. Michał Mech

    Dependency Injection nie jest przykładem wykorzystania wzorca Inversion of Control. To są dwa odrębne wzorce.

    Jeśli chodzi o książkę, to ja bym na niej nauki nie opierał. Spring przeszedł ostatnio wiele zmian więc nauka wersji 2.0 to strata czasu. Kompletnym minimum to wersja 2.5.6 gdzie i tak właśnie mamy na tapecie 3.0.0. Wbrew pozorom nie ilość i wysokość cyferek jest tu istotna. Zmian było sporo.

  2. chlebik Post author

    O tym na ile IoC i DI sa powiazane, na ile nie i co z tego wynika czytalem chyba wszystkie mozliwe opinie – na czyms trzeba sie oprzec.

    Co do wersji ksiazki – odziedziczylem ja chyba z zasobow WJUGa (nawet juz nie pamietam). Jak juz zaczne klepac kolejna aplikacje to rzecz jasna z najnowsza wersja, ale to jeszcze za jakis czas.

  3. Darek Ludera

    Może wywołam świętą wojnę, ale co tam:) Czy w świetle dostępności Seama świetnie integrującego JSF z EJB oraz wydania Java EE 6, Spring nadal jest atrakcyjną alternatywą dla Java EE (głównie EJB)? Innymi słowy co takiego mądrego ma Spring czego nie ma Seam i technologie przez niego ‘zszywane’?

  4. chlebik Post author

    Ma to, ze w 99% ogloszeniach o prace dla javowca jest wymieniany jako “must be”. Seam juz nie 🙂

  5. Michał Mech

    Darku Spring nie narzuca na Ciebie JEE z całym serwerem aplikacyjnym. Możesz dzięki temu użyć rozwiązań dużo lżejszych niż JBoss AS.
    Dodatkowo dziś Spring to nie tylko framework ale również wiele przydatnych bibliotek dookoła.

    Poza tym JSF 2.0 i JEE 6 to nowinki techniczne. Świat biznesu nie wyniesie się z używanych dziś technologii z beztroskim uśmiechem na twarzy.

  6. Darek Ludera

    @Michał Mech
    …Spring nie narzuca na Ciebie JEE z całym serwerem aplikacyjnym. Możesz dzięki temu użyć rozwiązań dużo lżejszych niż JBoss AS…

    Te same argumenty od czasów powstania Springa. Czy ‘świat biznesu’ przez duże B na prawdę wymaga lekkich rozwiązań, czy jest wręcz przeciwnie?:)

    @chlebik
    Co do ‘must be’ w ofertach pracy – nie jest czasem tak, że coraz częściej da się i Seama tam zauważyć? Czyżby powtórka z migracji Struts->JSF?

  7. chlebik Post author

    To zalezy Darku od profilu spolki – jesli ma 10 appow, ktore musi utrzymywac i rozwijac – wtedy Spring. Jak tworzy wciaz cos nowego to mozna i wejsc z czyms nowym. Takie moje zdanie.

  8. Michał Mech

    Darku moje dotychczasowe doświadczenia pokazują, że firmy dość często rezygnują z przyciężkich rozwiązań.
    Choć nie żebym się upierał. Seam jest fajny. Nie mniej na tym etapie dobrze jest znać Springa, tym bardziej, że z ogromnym powodzeniem można go stosować w aplikacjach inne niż webowe.

  9. Lukasz

    “… tworzenie aplikacji webowych dla Javy było dość nieprzyjemne. Dominującym paradygmatem był EJB 2 …”

    A co ma EJB 2 do aplikacji webowych? To chyba małe nieporozumienie 😉

  10. chlebik Post author

    Nie roszcze sobie prawa do bycia ekspertem od tego, co bylo 10 lat temu 🙂 Po prostu opisuje to, co wyczytalem o podstawach dla powstania Springa jako takiego.

  11. koziolekweb

    @Lukasz, jak pamiętam z mojej pierwszej firmy to w wielu przypadkach problemem było niezrozumienie do czego służy EJB i wwalano go do najprostszych aplikacji webowych jako must be. Jak mi opowiadali o JavieEE na uczelni to też EJB było głównym tematem, a servlety określano jako “male gówienko dające dostęp do komponentu”.

    @Darek, Spring to obecnie nie tylko framework, ale też duża baza wypadowa dla innych technologii. Ma własne AOP, całkiem fajne Security i kilka innych rzeczy, Jednak największą zaletą w porównaniu do SEAMa jest to, że możesz każdy z tych klocków wziąć użyć i nie jesteś związany przez web jako dostawcę UI. Spring to framework, a nie framework webowy.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s