Spring - набір модулів, для створення веб аплікацій та мікросервісів. Основні модулі data access
, web
, core
. По суті Spring Framework є контейнером для Dependency Injection, що керує написаними вами класами і їх залежностями.
Inversion of Control (IoC) - Архітектурне рішення, що дозволяє делегувати створення об'єктів. Його використовують для зменшення зв'язності елементів програми та спрощення масштабування можливостей системи.
Щоб слідувати принципам ІоС потрібно:
- Компоненти повинні відповідати за одну конкретну задачу.
- Компоненти мають бути максимально незалежні один від одного.
- Компоненти не повинні залежати від реалізації один одного.
Одним зі способів реалізації є механізм Dependency Injection (DI)
Dependency injection - шаблон проектування делегує фреймворку створення залежностей між об'єктами. Робить об'єкти слабо залежними та забирає хардкод залежності.
- За допомогою конструктора
- За допомогою сеттера
- Autowiring
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 - головний інтерфейс Spring, що надає інформацію про конфігурацію аплікації. А саме:
- Фабричні методи для доступу до компонентів аплікації.
- Можливість завантажувати файлові ресурси
- Можливість публікувати та обробляти події
- Керування життєвим циклом бінів
Bean - будьякий об'єкт, що створюється і керується Spring та існує в середині DI (IoC) контейнера.
- Singletone - створюється в момент прочитання Spring контейнером конфіг файлу. Являється спільним для всіх, хто запросить його у контейнера (змінні будуть посилатись на один і той самий об'єкт). Підходить для об'єктів, стан яких не міняється.
- Prototype - створюється тільки при звертанні до context.getBean. Створює кожен раз новий об'єкт. Підходить для об'єктів, які міняють стан.
- Session
Bean Lifecycle - перед ініціалізацією і перед закриттям контексту виконуються (якщо вони існують) методи init
і destroy
.
Application Context формується за допомогою короткого простого xml файлу та анотацій безпосередньо в коді. В xml файлі вказується лише пакет який буде скануватись на наявність бінів.
- @Component - анотація вказує які біни включати в контейнер. Використовується на рівні класів.
- @Autowired - використовується для вказання DI. По суті, шукає в контейнері бін, який би задовольний умову DI (підійшов по типу). Може використовуватись в конструкторі, сеттері, полі.
- @Qualifier - анотація може знадобитись, коли буде кілька бінів однакового типу, і контейнер не знатиме, який бін вибрати.
- @Value - використовується замість сеттера, якщо потрібно передати в бін якесь значення.
- @Scope
Dependency Inversion один з п'яти SOLID -принципів об'єктно-орієнтованого проектування програм, суть якого полягає у забезпеченні слабкої зв'язності між програмними модулями вищого та нижчого рівнів за допомогою спільних абстракцій (інтерфейсів). Принцип формулюється наступним чином:
- Модулі верхнього рівня не повинні залежати від модулів нижнього рівня. Обидва типи модулів мають залежати від абстракцій.
- Абстракції не повинні залежати від деталей. Деталі повинні залежати від абстракцій.
На практиці це реалізується впровадженням інтерфейсів між модулями верхніх та нижніх рівнів.
Spring MVC - фреймворк для створення веб аплікацій на Java, в основі якого лежить шабло н проектування MVC.
JSP - Java Server Page. Html з додаванням java коду. JSTL - Java Server Pages Standard Tag Library - розширення специфікації JSP.
Spring MVC аплікація складається з:
- Конфігурація Spring
- Опис Spring Beans
- Web сторінки
Модель - контейнер для зберігання даних. Через Controller
ми можемо додавати дані в Model
, і потім використовувати їх у View
.
Spring Boot - спрощує створення аплікації на основі Spring . Автоматично конфігурує аплікацію. Вбудована підтримка сервера (не треба ставити окреми Tomcat).
@Transactional