Skip to content

Latest commit

 

History

History
104 lines (79 loc) · 7.63 KB

spring.md

File metadata and controls

104 lines (79 loc) · 7.63 KB

Spring Framework

Spring - набір модулів, для створення веб аплікацій та мікросервісів. Основні модулі data access, web, core. По суті Spring Framework є контейнером для Dependency Injection, що керує написаними вами класами і їх залежностями.


Inversion of Control (IoC)

Inversion of Control (IoC) - Архітектурне рішення, що дозволяє делегувати створення об'єктів. Його використовують для зменшення зв'язності елементів програми та спрощення масштабування можливостей системи.

Щоб слідувати принципам ІоС потрібно:

  • Компоненти повинні відповідати за одну конкретну задачу.
  • Компоненти мають бути максимально незалежні один від одного.
  • Компоненти не повинні залежати від реалізації один одного.

Одним зі способів реалізації є механізм Dependency Injection (DI)


Dependency Injection

Dependency injection - шаблон проектування делегує фреймворку створення залежностей між об'єктами. Робить об'єкти слабо залежними та забирає хардкод залежності.

Способи впровадження DI:
  • За допомогою конструктора
  • За допомогою сеттера
  • Autowiring

Spring Container

Spring (DI / IoC) Container - ключовий компонент Spring, що надає механізм управління та налаштування залежностей.

Основні функції контейнера:
  • IoC, створення об'єктів і керування об'єктами.
  • DI

Контейнер створює об'єкти керуючись конфіг файлами. Конфігурування може відбуватись наступними способами:

  • Java-Based Configuration (@Bean, @Configuration) сучасний
  • Annotation-Based Configuration (@Component, @Controller, @Service, @Repository, @Autowired, і @Qualifier) сучасний
  • XML-Based Configuration старий
Існує два основних типи контейнерів:
  • Spring BeanFactory Container
  • Spring ApplicationContext Container

ApplicationContext

ApplicationContext - головний інтерфейс Spring, що надає інформацію про конфігурацію аплікації. А саме:

  • Фабричні методи для доступу до компонентів аплікації.
  • Можливість завантажувати файлові ресурси
  • Можливість публікувати та обробляти події
  • Керування життєвим циклом бінів

Bean

Bean - будьякий об'єкт, що створюється і керується Spring та існує в середині DI (IoC) контейнера.

Bean Scope:
  • Singletone - створюється в момент прочитання Spring контейнером конфіг файлу. Являється спільним для всіх, хто запросить його у контейнера (змінні будуть посилатись на один і той самий об'єкт). Підходить для об'єктів, стан яких не міняється.
  • Prototype - створюється тільки при звертанні до context.getBean. Створює кожен раз новий об'єкт. Підходить для об'єктів, які міняють стан.
  • Session

Bean Lifecycle - перед ініціалізацією і перед закриттям контексту виконуються (якщо вони існують) методи init і destroy.


Annotation-Based Configuration

Application Context формується за допомогою короткого простого xml файлу та анотацій безпосередньо в коді. В xml файлі вказується лише пакет який буде скануватись на наявність бінів.

  • @Component - анотація вказує які біни включати в контейнер. Використовується на рівні класів.
  • @Autowired - використовується для вказання DI. По суті, шукає в контейнері бін, який би задовольний умову DI (підійшов по типу). Може використовуватись в конструкторі, сеттері, полі.
  • @Qualifier - анотація може знадобитись, коли буде кілька бінів однакового типу, і контейнер не знатиме, який бін вибрати.
  • @Value - використовується замість сеттера, якщо потрібно передати в бін якесь значення.
  • @Scope

Dependency Inversion

Dependency Inversion Diagram Dependency Inversion один з п'яти SOLID -принципів об'єктно-орієнтованого проектування програм, суть якого полягає у забезпеченні слабкої зв'язності між програмними модулями вищого та нижчого рівнів за допомогою спільних абстракцій (інтерфейсів). Принцип формулюється наступним чином:

  • Модулі верхнього рівня не повинні залежати від модулів нижнього рівня. Обидва типи модулів мають залежати від абстракцій.
  • Абстракції не повинні залежати від деталей. Деталі повинні залежати від абстракцій.

На практиці це реалізується впровадженням інтерфейсів між модулями верхніх та нижніх рівнів.


Spring MVC

Spring MVC - фреймворк для створення веб аплікацій на Java, в основі якого лежить шабло н проектування MVC.

JSP - Java Server Page. Html з додаванням java коду. JSTL - Java Server Pages Standard Tag Library - розширення специфікації JSP.

Spring MVC аплікація складається з:

  • Конфігурація Spring
  • Опис Spring Beans
  • Web сторінки

Model

Модель - контейнер для зберігання даних. Через Controller ми можемо додавати дані в Model , і потім використовувати їх у View.


Spring Boot

Spring Boot - спрощує створення аплікації на основі Spring . Автоматично конфігурує аплікацію. Вбудована підтримка сервера (не треба ставити окреми Tomcat).


@Transactional