Witamy w kolejnym artykule odnośnie pytań padających podczas rozmów kwalifikacyjnych dotyczących stanowiska programisty Javy! Dzisiaj kontynuujemy obszerny temat Spring’a, dlatego zalecamy również zapoznać się z poprzednią częścią. Zdecydowanie nie ma na co więcej czekać – zaczynajmy!

Jakie moduły występują w Frameworku Springa?

Modułów jest całkiem sporo (gdzieś w okolicach dwudziestu), więc raczej nikt na rozmowie kwalifikacyjnej nie będzie nam kazał wymieniać wszystkich konkretnych modułów. Warto jednak wiedzieć, że moduły te są podzielone na konkretne warstwy, w których się one zawierają. I tak występujące w Springu moduły to:

1. Spring Core Container – podstawa frameworku. Zawiera w sobie poszczególne moduły:
– Spring Core i Spring Bean – zapewniają najbardziej podstawowe części frameworku, takie jak Odwrócenie kontroli (IoC), wstrzykiwanie zależności (DI)
– SpEL (Spring Expression Language) – używany w warstwie widoku do łatwej manipulacji obiektu (raczej rzadko teraz używany ;-))
– Spring Context – jest to swojego rodzaju medium umożliwiające dostęp do skonfigurowanych i zdefiniowanych w Springu obiektów.

2. Web – ta warstwa odpowiada za wsparcie tworzenia aplikacji Webowych. Zawierają się w niej moduły:
– Web – udostępnia podstawowe operacje związane z tworzeniem aplikacji webowych,
– Web – MVC – wsparcie dla aplikacji typu Model-View-Controller w aplikacjiach webowych. Umożliwia również wykorzystywanie innych możliwości frameworku,
– Web – Portlet – implementacja MVC w środowisku Portletów.

>> Sprawdź nasze aktualne oferty w obszarze: Java Developer

3. Data Access/Integration (dostęp do danych i ich integracja) – zawiera następujące moduły:
– JDBC (Java DataBase Conectivity) – dzięki temu modułowi możemy skorzystać z dodatkowej abstrakcyjnej warstwy JDBC, dzięki czemu możemy pozbyć się uciążliwego kodowania JDBC i interpretowania kodów błędów dostawcy bazy danych,
– ORM (Object Relational Mapping, czyli mapowanie obiektowo-relacyjne) – moduł ten zapewnia warstwę integracji dla popularnych frameworków takich jak Hibernate czy JPA.
– OXM (Object/XML Mapping, czyli mapowanie XML-owe) – analogicznie do ORM – zapewnia integrację z takimi technologiami jak XMLBeans, Toplink, JAXB.
– JMS (Java Message Service) – umożliwia produkowanie oraz konsumowanie wiadomości.
– Transaction – umożliwia zarządzanie transakcjami odbywającymi się w naszej aplikacji.

4. AOP (Aspect Oriented Programming) oraz Instrumentation – umożliwia wykorzystywanie możliwości oferowanych przez programowanie aspektowe. Dzięki temu jesteśmy w stanie definiować punkty cięcia (pointcuts) oraz „przecięcia” metod (method interceptors).

5. Test – moduł ten zawiera framework testowy, który wspiera komponenty Springa przy użyciu JUnit oraz TestNG. Zawiera również mocki obiektów, które są niezwykle przydatne podczas testowania twojego kodu w izolacji.

Rys. 1 Moduły Springa

Czym jest plik konfiguracyjny i dla czego się go używa?

Plik konfiguracyjny Spring’a to plik XML, który głównie zawiera informacje o klasach wykorzystywanych w aplikacji. Opisuje, w jaki sposób klasy są skonfigurowane oraz połączone pomiędzy sobą. Pliki te są dosyć łatwe do czytania, aczkolwiek w dużych aplikacjach potrafią być bardzo (bardzo bardzo) uciążliwe do używania.

Możemy sobie z tym jednak poradzić! Istnieje metoda zamienna do plików xml-owych. Do ich zastąpienia można wykorzystać adnotacje. Niesie to za sobą szereg zalet:

  1. Po pierwsze, ułatwiamy sobie sprawę w poszukiwaniu literówek. Każdy, kto pracował z konfiguracjami xml-owymi na pewno potwierdzi, że ich przeglądanie i szukanie błędu jest dużo gorsze niż przeglądanie klas i adnotacji;
  2. Jeżeli wystąpi błąd w aplikacji, to wystąpi on już podczas kompilacji w przeciwieństwie do XML-ów, które wyrzucają błędy dopiero podczas działania aplikacji;
  3. Łatwiejsze debugowanie;
  4. Dzięki IDE poruszanie się po strukturze aplikacji jest znacznie łatwiejsze, niż poruszanie się po tekstowym pliku XML-owym;
  5. Dużo łatwiejszy Refactoring.
Rys. 2 Przykładowa konfiguracja XML-owa do porównania z rysunkiem nr. 3
Rys. 3 Konfiguracja przy pomocy konfiguracji adnotacjami

Do czego służy programowanie aspektowe?

Programowanie aspektowe uzupełnia programowanie obiektowe wspomagając separację zagadnień oraz rozdzielenie programu na niezwiązane ze sobą moduły. Podobnie jak w programowaniu obiektowym najważniejszymi elementami są obiekty, tak w programowaniu aspektowym najważniejszymi elementami są aspekty. Aspekty służą do wykonywania czynności poprzez cały przekrój aplikacji. Oznacza to, że kod aspektu znajduje się w jednym miejscu, ale wpływa na całą aplikację. Przykładem może być zarządzanie transakcjami, autentyfikacja, logowanie, bezpieczeństwo itd. AOP umożliwia dynamiczne dodawanie funkcjonalności przed, po lub naokoło istniejącej logiki, używając prostej konfiguracji.

Rys. 4 Schemat działania programowania aspektowego. Moduły symbolizują różne funkcjonalności aplikacji, natomiast strzałki symbolizują czynności (aspekty), które przecinają cała aplikację.

Są to trzy elementy wykorzystywane podczas programowania aspektowego. I tak:

  1. Aspekt (Aspect) – jest to funkcjonalność, którą implementujesz, przecinająca Twoją aplikację. Przykładem może być chociażby aspekt raportowania – raporty są potrzebne w różnej części Twojej aplikacji, dlatego tworzysz jeden moduł raportowania, który następnie używasz w różnych częściach aplikacji.
  2. Punkt łączenia (JoinPoint) – jest miejscem w aplikacji, w które może być podłączony Twój aspekt. Tym punktem może być wywołanie danej metody, błąd wyrzucony przez Twoją aplikację, lub modyfikacja danego pola. W tym miejscu mogą być dodane Twoje aspekty, aby dodać do Twojej aplikacji nowe zachowanie.
  3. Porada (Advice) – jest to akcja wykonana przez aspekt w konkretnym punkcie przyłączenia.
Rys. 5 Schemat przedstawiający punkty przecięcia (PointCut)
Rys. 6 Schemat działania aspektów, porad oraz punktów przyłączenia

Wymień znane Ci typu porad (Advices)

Typy porad oznaczają, w jakich okolicznościach mają zostać wykonane aspekty. Możemy wykorzystywać następujące typy:

  1. Before (przed) – aspekt zostanie wykonany przed punktem przyłączenia, i jest konfigurowany poprzez adnotacje @Before;
  2. After returning (po wykonaniu) – aspekt zostanie wykonany po czynności określonej w punkcie przyłączenia, pod warunkiem, że metoda zakończy się poprawnie. Konfigurowany przy pomocy @AfterReturning;
  3. After throwing (po błędzie) – wykonaj aspekt po wyrzuceniu przez metodę błędu. Definiowany przy pomocy @AfterThrowing;
  4. After (Po) – aspekt działa zawsze po wykonaniu metody – bez względu na to czy metoda zadziałała poprawnie, czy wyrzuciła błąd. Ustawiany przy pomocy @After;
  5. Around (naokoło) – aspekt jest wykonywany przed oraz po punkcie przyłączenia. Podłączany przy pomocy adnotacji @Around.

To już chyba wszystkie pytania odnośnie Springa, które dla Was przygotowaliśmy. Mamy nadzieję, że odpowiedzi z tego artykułu pomogą Wam w zdobyciu upragnionej pracy. Jeżeli macie jeszcze jakieś pytania lub sugestie, na jakich tematach powinniśmy się skupić w kolejnych artykułach tej serii to piszcie śmiało w komentarzach, bądź na mój adres e-mail – marek.makuch@it-leaders.pl.  Widzimy się w kolejnych artykułach!

Następna część: Rozmowa kwalifikacyjna z Javy? Żaden problem! Cz. VIII (JPA)

Autor: Marek Makuch

PS: U nas w –> www.it-leaders.pl jest już sporo ofert dla Java developerów – załóżcie konto, a firma sama Was znajdzie!

Oryginalny wpis pojawił się na naszym blogu w lipcu 2018r.

logo IT-Leaders

IT-Leaders.pl to pierwsza w Polsce platforma łącząca Specjalistów IT bezpośrednio z pracodawcami. Anonimowy, techniczny profil i konkretnie określone oczekiwania finansowe to tylko niektóre z cech wyróżniających platformę. Zarejestruj się i zobacz jak Cię widzi pracodawca.