Professional Documents
Culture Documents
Лабраторна 2
Лабраторна 2
- Dependency Injection (DI) є прикладом шаблону IoC, який допомагає усунути залежності в
коді.
- Dependency inversion principle – один із принципів SOLID. Говорить про те, що класи верхніх
рівнів не повинні залежати від класів нижніх рівнів. Обидва повинні залежати від абстракцій.
2. В чому полягає різниця між анотаціями @Component та @Bean? Опишіть переваги та недоліки
створення бінів за допомогою цих анотацій.
@Component – анотація рівня класу, яка використовується для позначення класу як біна у середовищі
Spring (подібно до @Service, @Controller, @Provider які її розширюють).
@Bean – анотація рівня методу. Використовується для ініціалізації поверненого методом значення як
бін у конфігураціях.
Bean дає змогу внести певну логіку у ініціалізацію біна (наприклад, можна створити абстрактний клас
на основі інтерфейсу), в той час як Component дозволяє помічати компоненти як біни прямо в класі,
що є більш компактним.
7. Чи може бути в одному проекті кілька класів з реалізацією якогось інтерфейсу, якщо цей інтерфейс
використовується для ін’єкції залежностей? Може, якщо при цьому використовувати @Qualifier чи
@Primary
8. Чи може бін мати кілька методів, помічених анотацією @Autowired? Так (сетери).
9. Чи може бін мати кілька конструкторів, помічених анотацією @Autowired? Ні.
Лабраторна 3
Лабораторна 4
GraphQL. У той час як REST зосереджується на ресурсах і забезпечує набір кінцевих точок навколо них,
щоб дозволити багато операцій, GraphQL зосереджується на даних. Це більше мова запитів, ніж
справжній API, хоча він також надає всі необхідні інструменти для доступу до запитуваних даних.
4. Для реалізації якої чи яких операцій CRUD (create, read, update, delete) можуть використовуватися
такі методи протоколу HTTP як GET, POST, PUT, PATCH, DELETE?
Get –read, post – create (server initializes PK or other field), put – create (passing PK), update (fully replace),
patch – update (partial editing), delete – delete.
5. Що означають поняття «безпечний» та «ідемпотентний» метод HTTP? Чи будь який безпечний
метод є ідемпотентним? Чи будь який ідемпотентний метод є безпечним?
Ідемпотентність – властивість методу, коли, незалежно від кількості його викликів, стан та результат
залишаться незмінними. Get, put, delete (при умові, що видалення неіснуючого не повертає помилку)
Безпечість – при виклику метода стан не зміниться (read only). GET.
6. В чому полягає різниця між анотаціями @Controller та @RestController?
RestController доповнює Controller анотацією ResponseBody, яка вказує, що значення, яке повертає
метод, має бути прив’язане до мережевого тіла відповіді.
10. Як за допомогою анотації @Valid здійснювати валідацію даних, які надходять від клієнта?
З допомогою @Valid та анотацій javax.validation.constraints можливо здійснювати валідацію об’єктів
вхідних даних прямо у методах контролера. Можливо валідувати як один, так і усі параметри метода.
Лабораторна 5
Шаблон Spring JDBC дозволяє автоматично очищати ресурси, напр. звільнити підключення до бази
даних. Шаблон Spring JDBC перетворює стандартні SQLExceptions JDBC у RuntimeExceptions. Це
дозволяє програмісту більш гнучко реагувати на помилки. Шаблон Spring JDBC також перетворює
повідомлення про помилки, характерні для постачальника, у більш зрозумілі повідомлення про
помилки.
executeUpdate() – виконує DML (INSERT, UPDATE or DELETE, повертає кількість змінених заисів) або
такий запит SQL, який не повертає нічого (DDL).
execute() - виконує оператор SQL у цьому об’єкті PreparedStatement, який може бути будь-яким видом
оператора SQL. Деякі підготовлені оператори повертають кілька результатів - метод execute обробляє
ці складні оператори, а також простішу форму операторів, які обробляються методами executeQuery
та executeUpdate.
Інтерфейс для отримання ключів, зазвичай використовується для автоматично згенерованих ключів,
які потенційно повертаються операторами вставки JDBC. Реалізації цього інтерфейсу можуть містити
будь-яку кількість ключів. У загальному випадку ключі повертаються як список, що містить одну карту
для кожного рядка ключів.
6. Як працює декларативне керування транзакціями у Spring Framework?
Керування транзакціями у Spring працює завдяки принципу AoP (aspect oriented programming). Метод,
який потрібно виконати у транзакції обгортається проксі, яка, у випадку, якщо було отримано runtime
помилку, відкочує зміни.
Важливо мати на увазі, що якщо транзакційний компонент реалізує інтерфейс, за замовчуванням
проксі буде Java Dynamic Proxy. Це означає, що перехоплюватимуться лише зовнішні виклики методів,
які надходять через проксі. Будь-які виклики самостійного виклику не запускатимуть транзакції, навіть
якщо метод має анотацію @Transactional. Ще одне застереження щодо використання проксі-серверів
полягає в тому, що лише загальнодоступні методи мають бути анотовані @Transactional. Методи будь-
яких інших видимостей просто ігноруватимуть анотацію, оскільки вони не є проксі.
Required - Spring перевіряє, чи є активна транзакція, і якщо нічого не існує, створює нову. В іншому
випадку бізнес-логіка додається до поточної активної транзакції. Тип за замовчуванням.
Supports - Якщо транзакція існує, буде використано наявну транзакцію. Якщо транзакції немає, вона
виконується без транзакцій
Mandatory - якщо є активна транзакція, вона буде використана. Якщо немає активної транзакції, то
Spring повертає помилку.
Not_Supported – якщо транзакція існує її переривають, а бізнес логіка виконується без неї.
Requires_new – якщо транзакція існує її переривають, а бізнес логіка виконується у новій транзакції.