Spring – najpopularniejsze pytania z rozmów

Poniżej zebrałem najpopularniejsze pytania ze Spring Framework na jakie zdarzyło mi się odpowiadać w czasie swoich rozmów kwalifikacyjnych. Zestaw ten stanowi wiedzę zebraną w pigułce na tema samego frameworka, i związanych z nim pojęć Spring MVC, AOP,  IoC itp. Post ma służyć szybkiemu przypomnieniu sobie podstawowych zagadnień z tego bardzo praktycznego frameworka javowego. Poniżej lista pytań:

  1. Co to jest spring?
  2. Jakie są korzyści z używania Springa?
  3. Wymień moduły dostępne w Spring Famework?
  4. Czym jest plik konfiguracyjny w Spring?
  5. Co to jest wstrzykiwanie zależności (Dependency Injection) – DI?
  6. Jakie są typy odwrócenia IoC (wstrzykiwania zależności)?
  7. Który rodzaj wstrzykiwania zależności jest częściej wykorzystywany i polecany, czy oparty na konstruktorze czy metodzie ustawiającej?
  8. Jakie są korzyści z używania IoC?
  9. Co to jest AOP?
  10. Co to jest kontener Spring IoC?
  11. Wymień typy kontenrów IoC? Opisz je.
  12. Podaj przykład implementacji BeanFactory.
  13. Jakie są podstawowe implemetacje ApplicationContext?
  14. Jaka jest różnica między Bean Factory i ApplicationContext?
  15. Czym jest Spring bean?
  16. Co zawiera definicja bean?
  17. Jak dostarczyć konfigurację metadanych do kontenera Spring?
  18. Jak dodać bean w aplikacji spring?
  19. Jak definiować zakres beana?
  20. Jakie zakresy beanów wspiera Spring? Opisz je.
  21. Jaki jest domyślny zakres Spring framework?
  22. Czy bean o zakresie singleton jest zabezpieczony dla wykonania wielowątkowego w Spring Framework?
  23. Opisz cykle życia Bean w Spring framework?
  24. Co to jest bean wewnętrzny (inner) w Spring?
  25. Jak można wstrzyknąć kolekcje Java w Spring?
  26. Co to jest auto łaczenie (auto wiring) beanów?
  27. Jakie są tryby pracy auto łaczenia Beanów?
  28. Jakie są ograniczenia autowiring?
  29. Czy można wstrzyknąć null i pustego Stringa w Spring?
  30. Czym jest konfiguracja kontenera bazująca na Adnotacjach?
  31. Jak wlaczyć łaczenie za pomocą Adnotacji?
  32. Co oznacza adnotacja @Required?
  33. Co oznacza adnotacja @Autowired?
  34. Co oznacza adnotacja @Qualifier?
  35. Co oznacza adnotacja @Component?
  36. Co oznacza adnotacja @Service?
  37. Co oznacza adnotacja @Repository?
  38. Jak jest róznica miedzy adnotacją @Component a @Service?
  39. Czym są adnotacje JSR-250? Opisz je.
  40. Co to jest bazowa konfiguracja java (Java Based Configuration)? Podaj przykłady.
  41. Jak wykonane jest przechwytywanie zdarzeń w Spring?
  42. Opisz standardowe zdarzenia w spring.
  43. Co to jest Aspect?
  44. Podaj różnice między wymaganiami (concern) i wymaganiami przekrojowymi (cross-cutting concern) w Spring AOP?
  45. Co to jest Join point?
  46. Co to jest Advice?
  47. Co to jest Pointcut?
  48. Co to jest Introduction?
  49. Co to jest Target object?
  50. Co to jest Weaving?
  51. Jakie są punkty w kŧorych weaving może być stosowany?
  52. Jakie są typy advice?
  53. Co oznacza implementacja aspektów bazująca na schemcie XML?
  54. Czym jest @AspectJ? Bazowa implemenrtacja aspektów?
  55. W jaki sposób można uzyskać dostęp do Hibernate w Spring?
  56. Jakie ORM’y wspiera Spring?
  57. Jak JDBC może być stosowane efektywniej w spring framework?
  58. Jak JdbcTemplate może być używane?
  59. Jakie są typy zarzadzania transakcjami wspierane przez Spring?
  60. Który z typów zarzadzani transakcjami jest preferowany bardziej?
  61. Co to jest Spring MVC framework?
  62. Co to jest DispatcherServlet?
  63. Co to jest WebApplicationContext ?
  64. Czym Spring MVC przeważa nad Struts MVC ?
  65. Do czego służy kontroler w Spring MVC framework?
  66. Wyjaśnij adnotację @Controller.
  67. Wyjaśnij użycie adnotacji @RequestMapping.
  1. Co to jest spring?

Spring to framework open source dedykowany dla Java enterprise. Główne jego funkcje mogą być wykorzystane w tworzeniu dowolnej aplikacji Java, ale istnieją również rozszerzenia do budowania aplikacji internetowych w oparciu o najnowsze wersje platformie Java EE. Celami Spring Framework są, aby programowanie w J2EE było łatwiejsze oraz promowanie dobrych praktyk programowania poprzez wprowadzenie modelu programowania bazujący na POJO.

POJO(Plain Old Java Objects) to tylko zwykły, stary Java Bean z usuniętymi ograniczeniami. Java Bean musiał spełniać następujące wymagania:

  • Domyślny bez-argumentowy konstruktor
  • Zgodnie z konwencją Beanów metody getFoo (lub isFoo dla logicznych) oraz setFoo dla zmiennego atrybutu o nazwie foo; brak setFoo jeśli atrybut niezmienny.
  • Musi wdrożyć java.io.Serializable

POJO nie określa żadnej z nich. To jest po prostu to, jak sama nazwa mówi: obiekt, który kompiluje się pod JDK można uznać za Plain Old Java Object. Żaden serwer aplikacji, brak klasy bazowe, bez interfejsy wymagane do korzystania.

2. Jakie są korzyści z używania Springa?

Poniżej znajduje się lista kilku z wielkich zalet korzystania ze Spring Framework:

  • Lekkość: Spring jest lekki, jeśli chodzi o wielkość i przejrzystości. Podstawowa wersja framework’a wynosi około 2MB.
  • Odwrócona kontrola (IoC – Inversion of control): Luźne powiązanie klas jest osiągnięte są w Spring poprzez stosowanie techniki odwróconej kontroli. Obiekty same ładują swoje zależności, zamiast tworzenia lub szukania obiektów zależnych w kodzie logiki biznesowej danej klasy.

Cechy wzorca IoC: skupia się na interfejsach, zamiast na implementacji, uzależnia kod od abstrakcji, a nie od klas rzeczywistych, twórz klasy luźno ze sobą powiązane, stosuj kompozycję obiektów, zamiast dziedziczenia.

  • Programowanie aspektowe (AOP – Aspect oriented): Spring obsługuje programowanie wykorzystujące aspekty i umożliwia rozwój spoistego oprogramowania poprzez oddzielenie logiki biznesowej aplikacji od usług systemowych.
  • Kontener: Spring zawiera i zarządza cyklem życia oraz konfiguracją obiektów aplikacji.
  • MVC Framework: Spring web jest frammworkiem internetowym zaprojektowanym w oparciu o wzorzec MVC, która stanowi doskonałą alternatywę dla takich framworków jak Struts.
  • Zarządzanie transakcjami: Spring zapewnia spójny interfejs zarządzania transakcjami, które można skalować do transakcji lokalnych (np. przy użyciu jednej bazy danych) i skalować do transakcji globalnych (z wykorzystaniem JTA, na przykład).
  • Obsługa wyjątków: Spring zapewnia wygodny interfejs API do tłumaczenia wyjątków dla poszczególnych technologii (np. rzuconych przez JDBC, Hibernate lub JDO) do spójnych, wspólnych wyjątków.
3. Wymień moduły dostępne w Spring Famework?

Modóły dostępne w Spring: moduł Core, moduł Bean , moduł Context, moduł Expression Language , moduł JDBC, moduł ORM, moduł OXM, moduł Java Messaging Service(JMS), moduł transakcjimoduł Web, moduł Web-Servlet, moduł Web-Struts, moduł Web-Portlet

4. Czym jest plik konfiguracyjny w Spring?

Plik konfiguracyjny Spring to plik XML. Plik ten zawiera informacje o klasach i opisuje, jak te klasy są skonfigurowane i zależne od siebie.

5. Co to jest wstrzykiwanie zależmności (Dependency Injection) – DI?

Koncepcja ta mówi, że klasa nie tworzy swoich komponentów, ale opisują jak powinny być tworzone. Polega to na tym by nie łączyć bezpośrednio ze sobą komponentów i usług razem w kodzie, ale opisać jakie usługi potrzebują, które komponenty w pliku konfiguracyjnym. Kontener IoC jest wtedy odpowiedzialny za podpinanie wszystkiego.

Wzorzec odwrócenia kontroli (IoC) jest generalną koncepcją i może być wyrażona na wiele różnych sposobów. Wstrzykiwanie zależności jest zaledwie jednym z przykładów odwrócenia kontroli.

6. Jakie są typy odwrócenia kontroli IoC (wstrzykiwania zależności)?

Rodzaje IoC są:

  • wstrzykiwani zależności oparte o konstruktor(Constructor-based dependency injection): jest realizowane, gdy kontener wywołuje konstruktor klasy z wieloma argumentami, z których każdy reprezentuje zależność od innej klasy.
  • wstrzykiwani zależności oparte o metodę ustawiającą (Setter-based dependency injection): jest realizowane za pomocą metod ustawiających (setter) przez Bean po wywołaniu konstruktora bez-argumentowego lub bez-argumentowej metody statycznej fabryki w instancji Beana.
7. Który rodzaj wstrzykiwania zależności jest częściej wykorzystywany i polecany, czy oparty na konstruktorze czy metodzie ustawiającej?

Ponieważ można mieszać oba rozwiązania, dobrą zasadą jest używać wstrzykiwania opartego o konstruktor dla obowiązkowych zależności a metody ustawiającej dla opcjonalnych zależności. Należy pamiętać, że adnotacja @Required ustawiona na seterze mówi że zależność jest wymagana.

8. Jakie są korzyści z używania IoC?

Główne korzyści wynikające z IoC lub wstrzykiwania zależność jest:

  • minimalizacja ilości kodu w aplikacji.
  • sprawia, że aplikacja jest łatwa do testu, gdyż nie wymaga tworzenia żadnych singletonów lub odnośników mechanizmu JNDI w testach jednostkowych.
  • Luźny powiązanie (Loose coupling) jest promowane przy minimalnym wysiłku i za pomocą mało dokuczliwego mechanizmu.
  • Kontener IoC wspiera gorliwe (eager) i leniwe (lazy) ładowanie usług.
9. Co to jest AOP?

Aspektowe zorientowanych programowania lub AOP, jest techniką programowania, która umożliwia programistom zmodularyzowanie związków lub zachowań projektowych, które przecinają typowe wymogi, takie jak logowanie i zarządzanie transakcjami. Rdzeniem konstrukcji AOP jest aspekt, który obudowuje zachowania wpływające na wiele klas i moduły wielokrotnego użytku.

10. Co to jest kontener Spring IoC?

Kontener Spring IoC tworzy obiekty, łączy je razem, konfiguruje je i zarządza ich całym cyklem życia od stworzenia aż do zniszczenia. Kontener Spring wykorzystuje wstrzykiwania zależności (DI) do zarządzania usługami, które tworzą aplikację.

11. Wymień typy kontenera IoC? Opisz je.

Istnieją dwa typy pojemników IoC:

  • fabryka beanów (Bean Factory container): Jest to najprostszy kontener zapewniający podstawowe wsparcie dla DI. BeanFactory jest zwykle wykorzystany, gdy zasoby są ograniczone, np. na urządzeniach mobilnych i aplikacjach opartych na apletach.
  • kontener Spring ApplicationContext: kontener ten dodaje więcej funkcjonalności specyficznych dla Java Enterprice, takich jak zdolność do czytania wiadomości tekstowych z pliku właściwości oraz zdolności do wywoływania zdarzeń aplikacji dla zainteresowanych beanów zarejestrowanych jako nasłuchujące zdarzeń (event listeners).
12. Podaj przykład implementacji BeanFactory.

Najpowszechniej stosowanym przez BeanFactory jest implementacja klasy XmlBeanFactory. Pojemnik ten odczytuje metadane konfiguracji z pliku XML i używa go do tworzenia w pełni skonfigurowanego systemu lub aplikacji.

13. Jakie są podstawowe implemetacje ApplicationContext?

Trzy powszechnie stosowane implementacje ApplicationContext są następujące:

  • FileSystemXmlApplicationContext: konetener ten ładuje definicje Beanów z pliku XML. Tutaj musisz podać pełną ścieżkę dostępu do pliku konfiguracyjnego XML dla Beanów do konstruktora kontenera.
  • ClassPathXmlApplicationContext: kontener ten ładuje definicje Beanów z pliku XML. Tu nie trzeba podać pełną ścieżkę dostępu do pliku XML, ale trzeba ustawić CLASSPATH prawidłowo ponieważ kontener będzie szukać plików XML z konfiguracją Beanów w CLASSPATH.
  • WebXmlApplicationContext: Pojemnik ten ładuje plik XML zawierający definicje wszystkich beanów z poziomu aplikacji internetowej.
14. Jaka jest różnica między Bean Factory i ApplicationContext?

Oto niektóre z różnic:

  • ApplicationContext zapewniają środki do rozwiązywania wiadomości tekstowych, w tym wsparcie dla i18n.
  • ApplicationContext posiadają podstawowe metody, do ładowania zasobów plików, takich jak obrazki.
  • ApplicationContext umożliwia wysyłanie zdarzeń do beanów, które są zarejestrowane jako słuchające.
  • ApplicationContext realizuje MessageSource, interfejs używany do uzyskania zlokalizowanych wiadomości w czasie rzeczywistym, gdy jest podłączany.
15. Czym jest Spring bean?

Obiekty, które tworzą szkielet aplikacji i które są zarządzane przez kontener IoC Spring zwane są beanami. Bean jest obiektem, który jest tworzony, montowany i zarządzany przez kontener IoC. Te beany są utworzone w konfiguracji metadanych, które dostarczają do kontenera, na przykład w postaci definicji <bean/> w pliku XML.

16. Co zawiera definicja bean?

Definicja Beana zawiera informacje o konfiguracji metadanych, które są potrzebne dla kontenera:

  • jak stworzyć bean
  • szczegóły cyklu życia beana
  • zależności Beana
17. Jak dostarczyć konfigurację metadanych do kontenera Spring?

Istnieją następujące trzy ważne sposoby dostarczania konfiguracji metadanych do kontenera Spring:

  • oparty o plik konfiguracyjny XML.
  • konfiguracji opartej o Adnotacje
  • Konfiguracja Java
18. Jak dodać bean w aplikacji spring?

Przykład deklaracji beana:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">

   <bean id="myFirstBean" class="com.example.MyFirstBean">
       <property name="message" value="Hi, Toudi:)"/>
   </bean>

</beans>
19. Jak definiować zakres beana?

Podczas definiowania <bean> Spring masz możliwość deklarowania zakresu tego beana. Na przykład, aby zmusić Spring do wyprodukowania za każdym razem nowej instancji Beana kiedy jest używana, należy zadeklarować zakres Beana jako prototypem. Podobnie, jeśli chcesz, aby Spring zwracał za każdym razem jeden bean zakres musi być ustawiony na singleton.

20. Jakie zakresy beanów wspiera Spring? Opisz je.

Framework obsługuje następujące pięć zakresów, z których trzy są dostępne tylko w przypadku korzystania z internetowej wersji kontekstu aplikacji.

  • singleton: Ten zakres definiuje Bean o jednej instancji na kontener IoC Spring.
  • prototype: Ten zakres pojedynczej definicji Bean oznacza, że może być dowolna liczba instancji obiektu w kontenerze.
  • request: To zakresy definicji Bena ograniczono do żądania HTTP. Tylko w kontekście webowej wersji Spring ApplicationContext.
  • session: To zakresy definicji Bean ograniczony do zakresu sesji HTTP. Tylko w kontekście webowej wersji Spring ApplicationContext.
  • global-session: Ten zakresy definicji Bean ograniczony do zakresu globalnej sesji HTTP. Tylko w kontekście webowej wersji Spring ApplicationContext.
21. Jaki jest domyślny zakres Spring Framework?

Domyślny zakres to singleton.

22. Czy bean o zakresie singleton jest zabezpieczony dla wykonania wielowątkowego w Spring Framework?

Nie.

23. Opisz cykle życia Bean w Spring framework?

Poniższa sekwencja cyklu życia Bean Springowego:

  • Instancjonowanie – po pierwsze Spring kontener znajduje definicję Beanu w pliku XML i instancjonuje Bean.
  • Wypełnianie właściwości – używając wstrzykiwania zależności, Spring uzupełnia wszystkie właściwości określone w definicji Beana.
  • Ustawianie nazwy Beana – Jeżeli Bean implementuje interfejs BeanNameAware, Spring ustawia id Beana za pomocą metody setBeanName().
  • Ustawianie fabryki Beana– Jeśli Bean implementuje interfejs BeanFactoryAware, Spring ustawia beanfactory za pomocą metody setBeanFactory().
  • Wstępna inicjalizacja – zwany także post-procesowaniem Beana. Jeśli są jakiś BeanPostProcessors związany z Beanem, Spring wywołuje metodę postProcessBeforeInitialization().
  • Inicjalizacja Beana – Jeżeli bean realizuje interfejs InitializingBean, jego metoda afterPropertySet() jest wywoływana. Jeśli Bean posiada zdeklarowaną metodę inicjującą to ta metoda jest wywoływana
  • Post inicjalizacja – Jeśli jest jakiś BeanPostProcessors związany z Beanem, jego metoda postProcessAfterInitialization() zostanie wywołana.
  • Gotowy do użycia – Teraz Bean jest gotowy do użycia przez aplikację.
  • Destroy – Jeżeli Bean implementuje DisposableBean będzie wywołana metoda destroy().
24. Co to jest bean wewnętrzny (inner) w Spring?

<bean /> wewnątrz elementu <property /> lub <constructor-arg /> definiuje tzw wewnętrzny Bean. Wewnętrzna definicja Beana nie wymaga określonego ID lub nazwy; pojemnik ignoruje te wartości. ignoruje również flagę zakresu. Bean wewnętrzne są zawsze anonimowe i są one zawsze zakresu prototype.

25. Jak można wstrzyknąć kolekcje Java w Spring?

Spring oferuje cztery rodzaje elementów konfiguracji kolekcji, które przedstawiają się następująco:

  • <list>: umożliwia wstrzykiwanie listy wartości, zezwala na duplikaty.
  • <set>: umożliwia wstrzykiwanie zbioru wartości, ale bez duplikatów.
  • <map>: To może być użyty do wstrzyknięcia zbiór par nazwa-wartość, gdzie nazwa i wartość może być dowolnego typu.
  • <props>: To może być użyty do wstrzyknięcia zbiór par nazwa-wartość, gdy nazwa i wartość typu String.
26. Co to jest auto łączenie (auto wiring) beanów?

Spring kontener jest w stanie automatycznie tworzyć relacje pomiędzy współpracującymi Beanami. Oznacza to, że możliwe jest, aby automatycznie znajdować współpracowników (innych Beanów) dla Beana, sprawdzając zawartość BeanFactory bez użycia <constructor-Arg > i elementu <property>.

27. Jakie są tryby pracy auto łaczenia Beanów?

Funkcjonalność autowiring ma pięć trybów pracy, które mogą być wykorzystane do poinstruować kontener Spring użyciu autowiring do wstrzykiwań zależności:

  • no: Jest to ustawienie domyślne, które oznacza brak autowiring i należy użyć wskaźnika odniesienia do Beana, którego chcemy połączyć. To jest to, co już widzieliśmy w rozdziale Dependency Injection.
  • byname: autowiring według nazwy właściwości. Pojemnik Spring patrzy na właściwości Beanów, na których atrybut autowire jest ustawiony na byname w pliku konfiguracyjnym XML. Następnie stara się dopasować swoje właściwości i połączyć z Beanem określonym przez daną nazwę w pliku konfiguracyjnym.
  • byType: autowiring odbywa się na podstawie typu danych. Kontener Spring patrzy na właściwości Bean, na których autowire atrybut jest ustawiony na byType w pliku konfiguracyjnym XML. Następnie stara się dopasować i połączyć właściwość, jeśli jej typ łączy się z Beanem w pliku konfiguracyjnym. Jeśli istnieje więcej niż jedna taki Bean, rzucany jest wyjątek.
  • Konstruktor: Podobny do byType, ale odnosi się do typu argumentów konstruktora. Jeśli nie ma dokładnie takiego Bean’a w kontenerze jak typ argumentu konstruktora , to błąd krytyczny jest rzucany.
  • autodetect: Spring próbuje najpierw podłączyć używając autowire przez konstruktor, jeśli to nie działa, Spring próbuje autowire przez byType.
28. Jakie są ograniczenia autowiring?

Ograniczenia autowiring są nastepujące:

  • Możliwość nadpisania: Nadal można określić zależności używając <constructor-arg> i <property> w konfiguracji XML. Ustawienia te zawsze zastępują autowiring.
  • Prymitywne typy danych: Nie można autowire tak zwanych prostych właściwości, takich jak typy prymitywne, String, i Classes.
  • Mylący charakter: Autowiring jest mniej dokładne niż sprecyzowane łączenie.
29. Czy można wstrzyknąć null lub pusty String w Spring?

Tak

30. Czym jest konfiguracja kontenera bazująca na Adnotacjach?

Alternatywą dla konfiguracji XML jest oparta na adnotacjach konfiguracja, która polega na wykorzystaniu metadanych kodu bajtowego dla połączenia komponentów zamiast deklaracji za pomocą tagów. Zamiast używać XML do opisu połączenia Bean, deweloper przesuwa konfigurację do samej klasy komponentów za pomocą adnotacji do istotnej klasy, metody lub deklaracji pola.

31. Jak wlaczyć łaczenie za pomocą Adnotacji?

Łączenie adnotacyjne nie jest włączona w kontenerze Spring domyślnie. Tak więc, zanim możemy wykorzystać łączenie za pomocą adnotacji, musimy włączyć go w naszym pliku konfiguracyjnym Spring wstawiając <context:annotation-config/>.

32. Co oznacza adnotacja @Required?

Ta adnotacja wskazuje, że wybrana właściwość Beana musi być wypełniana w czasie konfiguracji, poprzez sprecyzowane połączenie w definicji Beana lub poprzez autowiring. Pojemnik rzuca BeanInitializationException jeżeli właściwość Beana nie została wypełniona.

33. Co oznacza adnotacja @Autowired?

Ta adnotacja zapewnia bardziej precyzyjną kontrolę nad tym, gdzie i jak autowiring powinny być zrealizowany. Adnotacja @Autowired mogą być wykorzystane do auto-łaczenia Beana na metodzie ustawiającej (setter), konstruktorze, właściwości lub metodzie o dowolnych nazwach i / lub dowolnej liczbie argumentów.

34. Co oznacza adnotacja @Qualifier?

W sytuacji, kiedy utworzy się więcej niż jedną Beana tego samego typu i chcemy podłączyć tylko jeden z nich z właściwością, w takim przypadku można użyć adnotacji @Qualifier wraz z @Autowired w celu usunięcie niejasności poprzez określenie jaki dokładnie Bean ma zostać połączony.

35. Co oznacza adnotacja @Component?

Spring widząc że klasa ma ustawioną powyższa adnotację wie że z danej klasy musi utworzyć beana i nadać mu id takie jak nazwa klasy tylko małą literą. Taki bean może być wstrzykiwany adnotacyjnie czy też xml-owo do innych beanów. Omijamy w ten sposób potrzebę definiowania bena w konfiguracji xml. Specjalizacjami adnotacji @Component są:

  • @Service
  • @Repository
  • @Controller
36. Co oznacza adnotacja @Service?

Adnotacja używana jako stereotyp do definiowania warstwy usług. Spring widząc że klasa ma ustawioną powyższa adnotację wie że z danej klasy musi utworzyć beana i nadać mu id takie jak nazwa klasy tylko małą literą. Taki bean może być wstrzykiwany adnotacyjnie czy też xml-owo do innych beanów. Omijamy w ten sposób potrzebę definiowania Bean w konfiguracji xml.

37. Co oznacza adnotacja @Repository?

Adnotacja używana jako stereotyp do definiowania warstwy obiektów persistans Bean (używanych przy pracach z bazami danych). Takie Beany są używane np. do tłumaczenia wątków z warstwy persistans. Spring widząc że klasa ma ustawioną powyższa adnotację wie że z danej kalsy musi utworzyć beana i nadać mu id takie jak nazwa klasy tylko małą literą. Taki bean może być wstrzykiwany adnotacyjnie czy też xml-owo do innych beanów. Omijamy w ten sposób potrzebę definiowania bena w konfiguracji xml.

38. Jak jest róznica miedzy adnotacją @Component a @Service?

Poz tym że @Service jest adnotacją pochodną od @Component więcej różnic nie znajdziemy. Działanie obu adnotacji jest takie same na kontener Spring. Wprowadzenie tych dwóch adnotacji było podyktowane tym by określić osobne stereotypy pozwalające na podział wielowarstwowy aplikacji. Wyobraźmy sobie, że korzystamy z AOP i chcemy wszystkie wywołania metod serwisów logować. W przypadku gdy prawidłowo używaliśmy stereotypów to sprawa jest uproszczona i łatwo będzie nam zdefiniować odpowiedni pointcut.

39. Czym są adnotacje JSR-250? Opisz je.

Spring ma bazowe adnotacje JSR-250, do kŧórych zalicza się:

  • @PostConstruct: Ta adnotacja może być stosowana jako alternatywna dla metody odpalanej po inicjalizacji.
  • @PreDestroy: Ta adnotacja może być stosowana jako alternatywna metody wywoływanej po zniszczeniu obiektu.
  • @Resource: Ta adnotacja może być stosowany na pól lub metod dostępowych. @Resource pobiera nazwę atrybutu, i po tej nazwie znajduje Beana który nazywa się tak samo i wstrzykuje go. Można powiedzieć, że łączenie zachodzi w trybie by-name.
40. Co to jest bazowa konfiguracja java (Java Based Configuration)? Podaj przykłady.

Podstawowa opcja konfiguracji Java pozwala pisać większość konfiguracji Spring bez XML, ale z pomocą kilku bazowych adnotacji Java.

Na przykład adnotacja @Configuration oznacza, że klasa może być używany przez kontener Spring IoC jako źródło definicji Beanów. Adnotacja @Bean mówi frameworkowi, że metoda opatrzona @Bean zwróci obiekt, który powinien być zarejestrowany jako Bean w kontekście aplikacji Spring.

41. Jak wykonane jest przechwytywanie zdarzeń w Spring?

Przechwytywani zdarzeń w ApplicationContext zachodzi po przez klasę ApplicationEvent i interfejs ApplicationListener. Jeśli Bean implementuje ApplicationListener, to za każdym razem, kiedy ApplicationEvent zostanie opublikowany w ApplicationContext, Bean jest zawsze o tym powiadamiany.

42. Opisz standardowe zdarzenia w spring.

Spring zapewnia następujące standardowe zdarzenia:

  • ContextRefreshedEvent: To zdarzenie jest zgłaszane gdy ApplicationContext jest zainicjowany lub odświeżany. Może być również zgłaszane podczas użycia metody refresh() z interfejsu ConfigurableApplicationContext.
  • ContextStartedEvent: To zdarzenie jest zgłaszane gdy ApplicationContext rozpoczyna użyciu metody start() z interfejsu ConfigurableApplicationContext. Możesz odpytywać bazę danych lub można restartować dowolną zatrzymaną aplikację po otrzymaniu tego zdarzenia.
  • ContextStoppedEvent: To zdarzenie jest zgłaszane gdy ApplicationContext zostaje zatrzymany przy użyciu metody stop() z interfejsu ConfigurableApplicationContext. Można wykonać wymagane pracę czyszczace po otrzymaniu tego zdarzenia.
  • ContextClosedEvent: To zdarzenie jest zgłaszane gdy ApplicationContext zostanie zamknięty za pomocą metody close() z interfejsu ConfigurableApplicationContext. Zamknięty kontekst osiąga swój kres życia; nie może być odświeżany lub ponownie uruchomiony.
  • RequestHandledEvent: Jest to zdarzenie specyficzne dla aplikacji webowych mówiące, że wszystkie Beany z żądania HTTP zostały obsłużone.
43. Co to jest Aspect?

Moduł, który posiada zestaw funkcji API zapewniające obsługę wymagań przekrojowych. Na przykład, moduł logowania będzie wołał aspekt AOP rejestrujący logi. Aplikacja może mieć dowolną liczbę aspektów w zależności od zapotrzebowania. Aspekty Spring AOP, są realizowane z wykorzystaniem regularnych klas (podejście bazujące na schemacie) lub klas z adnotacją @Aspect (styl @AspectJ).

44. Podaj różnice między wymaganiami (concern) i wymaganiami przekrojowymi (cross-cutting concern) w Spring AOP?
  • Concern (wymaganie): jest to zachowanie, które chcemy mieć w module aplikacji. Wymaganie może być zdefiniowana jako funkcja, którą chcemy zaimplementować. Zagadnienie, którym jesteśmy zainteresowani definiujące nasze problemy.
  • Cross-cutting concern(wymaganie przekrojowa): Jest to problem, który dotyczy całej aplikacji, i wpływa na całą aplikację. na przykład logowanie, bezpieczeństwo i transferu danych są wymagania, które są potrzebne w niemal każdym module aplikacji, stąd wymagania przekrojowe.
45. Co to jest Join point?

Stanowi to punkt w twojej aplikacji, gdzie można podłączyć aspekt AOP. Można również powiedzieć, że jest to rzeczywiste miejsce w wymaganiach, gdzie zostanie podjęta akcja przy użyciu Spring AOP .

46. Co to jest Advice?

Jest to rzeczywista akcja, które należy podjąć przed lub po wykonaniu metody. Jest to rzeczywista część kodu, która jest wywoływana podczas wykonywania programu przez framwork Spring AOP.

47. Co to jest Pointcut?

Jest to zestaw jednego lub więcej punktów łączeń, gdzie Advice powinna zostać wykonana. Można określić Pointcut za pomocą wyrażeń lub wzorów.

48. Co to jest Introduction?

Introduction pozwala dodawać nowe metody lub atrybuty do istniejących klas.

49. Co to jest Target object?

Obiekt będący wyznaczonym przez jeden lub więcej aspektów. Obiekt ten musi być zawsze obiektem proxy. Musi być także określany jako wyznaczony obiekt.

50. Co to jest Weaving?

Weaving to proces łączenia aspektów z innymi typami z aplikacji lub obiektami w tworzony docelowy obiekt (Target object).

51. Jakie są punkty w kŧorych weaving może być stosowany?

Weaving można zrobić w czasie kompilacji, podczas ładowania lub przy starcie.

52. Jakie są typy advice?

Aspekty mogą pracować z pięcioma rodzajami Advice wymienionymi poniżej:

  • before: Uruchom advice przed wykonaniem metody.
  • after: Uruchom advice po wykonaniu metody nie zależnie od jej wyniku
  • after-returning: uruchom advice po wykonaniu metody tylko wtedy, gdy metoda zakończy się pomyślnie.
  • after-throwing: Uruchom advice po wykonaniu metody tylko wtedy gdy zostanie rzucony wyjątek.
  • around: Uruchom advice przed i po tym jak metoda zostanie wywołana.
53. Co oznacza implementacja aspektów bazująca na schemcie XML?

Aspekty są realizowane z wykorzystaniem tagów z bazowej konfiguracji XML.

54. Czym jest @AspectJ? Bazowa implementacja aspektów?

@AspectJ odnosi się do stylu deklarowania opartego na standardowych klasach Javy z wykorzystaniem adnotacji Java 5.

55. W jaki sposób można uzyskać dostęp do Hibernate w Spring?

Istnieją dwa sposoby uzyskania dostępu do Hibernate za pomocą Springa:

  • Odwrócenie sterowania z Hibernate Template i Callback.
  • Rozszerzanie HibernateDAOSupport i stosowanie węzła AOP Interceptor.
56. Jakie ORM’y wspiera Spring?

Spring wspiera następujące ORM:

  • JPA (Java Persistence API)
  • Hibernate
  • TopLink
  • JDO (Java Data Objects)
  • OJB
  • iBatis
57. Jak JDBC może być stosowane efektywniej w spring framework?

JDBC mogą być stosowany bardziej efektywnie przy pomocy szablonu klas udostępnianych przez framework zwanych JdbcTemplate.

58. Jak JdbcTemplate może być używane?

Dzięki wykorzystaniu platformy Spring JDBC ciężar zarządzania zasobami i obsługi błędów jest zredukowany do minimum. Więc pozostawia programistom pisać segmenty i zapytania, aby wyciągnąć dane z bazy danych. JdbcTemplate zapewnia wiele metod wygodnych do wykonywania czynności takich jak konwersja danych z prymitywnych typów bazo danych lub objektów, wykonywanie zapytań i zapewnienia standardowej obsługi błędów bazy danych.

59. Jakie są typy zarzadzania transakcjami wspierane przez Spring?

Spring obsługuje dwa typy zarządzania transakcjami:

  • Programmatic transaction management (programowe): Oznacza to, że zarządzanie transakcjami jest wmiszane w kodzie biznesowym aplikacji. To daje maksymalną elastyczność, ale jest trudna do utrzymania.
  • Declarative transaction management (Deklaratywne): Oznacza to, oddzielenie zarządzania transakcjami od kodu biznesowego. Używamy tylko adnotacji lub bazowej konfiguracji opartej o XML do zarządzania transakcjami.
60. Który z typów zarzadzani transakcjami jest preferowany bardziej?

Deklaratywne zarządzanie transakcjami jest bardziej preferowane niż programowe zarządzania transakcjami choć jest mniej elastyczne niż programowe, który pozwala na kontrolowanie transakcji bezpośrednio w kodzie.

61. Co to jest Spring MVC framework?

Spring Web MVC framework zapewnia architekturę Model-View-Controller i gotowe komponenty, które mogą być wykorzystane do opracowania elastycznych i luźno powiązanych aplikacji internetowych. Wzorzec MVC powoduje oddzielenie różnych aspektów stosowania (logiki wejścia, logiki biznesowej i logiki UI), zapewniając jednocześnie luźne powiązania między tymi elementami.

62. Co to jest DispatcherServlet?

Framework Spring Web MVC jest zaprojektowany w oparciu o DispatcherServlet, który obsługuje wszystkie żądania i odpowiedzi HTTP.

63. Co to jest WebApplicationContext ?

WebApplicationContext jest rozszerzeniem zwykłego ApplicationContext który ma kilka dodatkowych funkcji niezbędnych dla aplikacji internetowych. Różni się on od normalnego ApplicationContext tym, że jest w stanie rozwiązać żądania, i za pomoca którego Servleta.

64. Czym Spring MVC przeważa nad Struts MVC ?

Oto niektóre z zalet Spring MVC, kŧóre czyniom go lepszym frameworkem od Struts MVC:

  • Spring w MVC jest bardzo wszechstronny i elastyczny oparty na interfejsach a Struts nażuca Action i obiekt Form w formie dziedziczenia.
  • Spring zapewnia zarówno przechwytywacze i kontrolery, a tym samym pomaga czynnik wypracować wspólną zachowanie dla obsługi wielu żądań.
  • Spring może być skonfigurowane z różnymi technologiami widoków jak Freemarker, JSP, Tiles, Velocity, XLST itp, a także można stworzyć swój własny mechanizm niestandardowych widoków realizując interfejs View.
  • W Spring MVC Kontrolery mogą być konfigurowane za pomocą DI (IoC), który sprawia, że ​​jego testy i integracja są łatwe.
  • Warstwa Spring MVC jest łatwiejsza do testowania niż internetowa warstwa Struts, ze względu na unikanie przymusowego dziedziczenia i wyraźnego określania zależności kontrolerów i dyspozytora serwletu.
  • Struts zmuszaja kontrolery do rozszerzania klas Struts, w Spring nie, może istnieć wiele implementacji kontrolerów, które można wybrać do rozszerzenia.
  • W Struts, Akcje są dołączone do widoku poprzez zdefiniowanie ActionForwards w ActionMapping lub globalnie. Spring MVC posiada interfejs HandlerMapping do obsługi tej funkcji.
  • W struts, walidacja jest zazwyczaj wykonywane (realizowana) w metodzie validate w ActionForm. W SpringMVC, zatwierdzające są obiekty biznesowe, które nie są zależne od Servlet API, co sprawia, że można je ponownie wykorzystać w logice biznesowej przez obiejk bazodanowy.
65. Do czego służy kontroler w Spring MVC framework?

Kontrolery zapewniają dostęp do zachowania aplikacji, które zazwyczaj definiowana poprzez interfejs usługi. Kontrolery interpretuje dane wprowadzone przez użytkownika i przekształcają je w model, który jest przedstawiony użytkownikowi przez widok. Spring realizuje kontroler w bardzo abstrakcyjny sposób, który pozwala tworzyć szeroką gamę kontrolerów.

66. Wyjaśnij adnotację @Controller.

Adnotacja @Controller wskazuje, że dana klasa służy w aplikacji jako kontroler. Spring nie wymaga żadnego rozszerzenie klasy bazowej kontrolera lub odwołań do Servlet API.

67. Wyjaśnij użycie adnotacji @RequestMapping.

Adnotacja @RequestMapping jest używana do mapowania URL do całej klasy lub wybranej metody przechwytującej.

Jedna myśl nt. „Spring – najpopularniejsze pytania z rozmów”

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *