Rozmowa kwalifikacyjna z Javy? Żaden problem! Cz. VII (Spring)

Witamy w kolejnym artykule odnośnie pytań padających podczas rozmów kwalifikacyjnych dotyczących stanowiska programisty Javy! W tym tekście będziemy kontynuować jakże obszerny temat framework’u Spring-a, dlatego zalecamy również zapoznać się z poprzednią częścią. Zdecydowanie nie ma na co więcej czekać – zaczynajmy!
  1. 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:

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.

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.

banner - otrzymaj pracę marzeń

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.

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).

Test – moduł ten zawiera framework testowy, który wspiera componenty 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.

  1. Czy Beany Springa są bezpieczne do pracy z wieloma wątkami?

Odpowiedź jest krótka – nie. W Springu możemy ustawiać różne zakresy (po więcej informacji możecie zajrzeć do części pierwszej artykułu) i tam rzeczywiście możemy ustawić zakres Singleton. Jak wiemy z poprzednich artykułów to czy Singleton jest bezpieczny do pracy z wieloma wątkami zależy od jego implementacji, więc zapewne to mogło Cię zmylić w odpowiedzi na to pytanie (bo przecież singleton może być bezpieczny). Aspektem mylącym może być nazwa – Singleton przy zakresach oznacza kiedy obiekt został stworzony. I tak obiekt o zakresie prototype będzie tworzony podczas każdej iniekcji, podczas gdy singleton będzie tworzony jeden raz i współdzielony w całym kontekście aplikacji. To aby Bean był bezpieczny do pracy z wieloma wątkami będzie dalej zależeć od jego konstrukcji, a więc od tego jak go zaimplementujemy w aplikacji.

  1. Czym jest plik konfiguracyjny Springa (Spring configuration file)?

Plik konfiguracyjny Springa 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.

  1. Czy istnieje inny sposób konfiguracji aplikacji oprócz plików xml-owych?

Częsta kontynuacja do pytania numer 3. Całe szczęście tak, istnieje metoda zamienna do plików xml-owych! Do zastąpienia ich 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.

  1. Czym jest programowanie aspektowe w Springu (Aspect Oriented Programming)?

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, autentykacja, 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ę.

  1. Co rozumiesz poprzez Aspekt (Aspect), punkt łączenia (JoinPoint) oraz porada (Advice)?

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.

Rys.  5 Schemat przedstawiający punkty przecięcia (PointCut).

  1. Porada (Advice) – jest to akcja wykonana przez aspekt w konkretnym punkcie przyłączenia.

Rys.  6 Schemat działania aspektów, porad oraz punktów przyłączenia.

  1. 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!

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!

IT-Leaders.pl to pierwsza na rynku 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.

Może Ci się również spodoba