Spring Boot Vocabulary: 30 Terms for Java Backend Developers (англійською)

Автоматичне налаштування запуску Spring, бобові, введення залежностей, дані Spring, безпека Spring і словник Java для підприємств.

Spring Boot є домінуючим фреймворком для створення Java-засновних програм, і він має багатий словник, який формує те, як розробники спілкуються щодня. Незалежно від того, чи ви приєднуєтеся до нової команди, читаєте коментарі до перегляду коду або готуєтеся до технічного інтерв’ ю, знання цих термінів допоможе вам слідкувати за розмовами, ставити правильні питання і говорити як впевнений інженер сервера. Цей посібник містить основні слова та визначення Spring Boot, які викладено простою англійською мовою, а також приклади того, як розробники використовують ці терміни на роботі.


Основні концепції Spring Boot

Bean

** Bean ** — це будь- який об’ єкт, яким керує контейнер Spring — тобто, Spring створює його, налаштовує його і керує його життєвим циклом. Ви не використовуєте new для створення бобів самостійно; Spring робить це за вас на основі ваших налаштувань.

Цей клас послуг є singleton bean — існує тільки один екземпляр по всій програмі

«Я забув анотувати клас, тому він не був зареєстрований як боби і введення зазнало невдачі»

Контекст програми

** Контекст програми ** є центральним контейнером у програмі Spring. Він містить всі бобові, керує їх залежностями і надає такі послуги, як публікація подій і підтримка міжнародності. Уявіть його як « мозок » вашої програми Spring.

Коли контекст програми запускається, він з’єднує всі боби разом

«Ми завантажуємо контекст тестової програми, який включає тільки шар бази даних — без веб-шару»

Автоматична конфігурація

** Автоматично налаштовувати ** є однією з найпотужніших можливостей Spring Boot. Якщо ви додаєте залежність до вашого проекту, Spring Boot автоматично налаштовує пов’ язані з нею бобові і параметри без необхідності вручну налаштовувати XML або Java. За допомогою цього пункту можна перевірити, що міститься у шляху класів, і застосувати типові значення.

«Авто-конфігурація виявила драйвер H2 на шляху класу і створила для нас базу даних в пам’яті»

«Я повинен був виключити клас DataSourceAutoConfiguration, тому що ми обробляємо джерело даних вручну.»

Залежність стартера

** Залежність від початку ** — це група бібліотек, які об’ єднано разом для певної мети. Замість додавання десяти окремих бібліотек і керування їх версіями, ви додаєте одну стартову, а Spring Boot займається всім іншим. Поширені приклади включають spring-boot-starter-web, spring-boot-starter-data-jpa, і spring-boot-starter-security.

Просто додайте web starter до вашого pom.xml і ви отримаєте Tomcat, Jackson, і Spring MVC з коробки

«Ми перейшли від web starter до WebFlux starter, щоб використовувати реактивний стек»

Вбудований сервер

** Вбудований сервер ** — це веб- сервер (зазвичай, Tomcat або Netty), який пакується всередині JAR вашої програми, а не розгортається окремо. Spring Boot включає вбудований сервер за замовчуванням, тому ви можете запустити свою програму з однією командою java -jar.

«Ми поставляємо жирний JAR з вбудованим Tomcat — немає потреби встановлювати або налаштовувати окремий сервер.»

«Ми використовуємо реактивний стек, тому вбудований сервер — це Netty, а не Tomcat.»


Анотації та введення залежностей

@Component, @Service, @Repository, @Controller

У всіх цих чотирьох анотаціях Spring повідомляється про те, що клас має бути керований як боб, але вони мають різне семантичне значення:

  • ** @ Component ** — загальний компонент, яким керує Spring.
  • ** @ Служба ** — позначає клас як містящий бізнес- логіку.
  • ** @ Repository ** — позначає клас, який отримує доступ до бази даних; також увімкнути переклад винятків Spring.
  • @Controller (або @RestController) — позначає клас, який обробляє HTTP-запити.

«Покладіть бізнес-логіку в клас @Service, а не в контролер — зберігайте шари чистими»

«Анотація @Repository важлива, тому що Spring обгортає будь-які винятки з бази даних у власну ієрархію винятків»

@Autowired

** @ Autowired ** — це анотація, яка наказує Spring автоматично вставляти залежність. Ви вставляєте його у конструктор, метод або поле, і Spring знаходить відповідний боб і надає його. Введення конструктора зазвичай є перевагою, оскільки робить залежності явними і простішими для перевірки.

«Я віддаю перевагу конструкторному введенню над @Autowired на полях — це чистіше і працює краще в тестах одиниць»

Spring не міг автоматично встановити залежність, тому що він знайшов два боби одного типу — вам потрібно @Qualifier, щоб сказати йому, який з них використовувати

@SpringBootApplication

** @ SpringBootApplication ** — це зручний анотований текст, розташований у головному класі програми Spring Boot. Це поєднання трьох анотації: @Configuration, @EnableAutoConfiguration, і @ComponentScan. Цей параметр наказує Spring Boot шукати компоненти, увімкнути автоматичне налаштування і розглядати клас як джерело налаштувань.

«Головний клас з @SpringBootApplication є точкою входу — це місце, де починається контекст застосування»

«Ми помістили головний клас в кореневий пакунок, тому @ComponentScan автоматично підбирає всі підпакунки.»


Безпека, конфігурація та дані

Інформаційний бюлетень ВО «Свобода»

** Spring Data JPA ** — це шар, розташований над JPA (Java Persistence API), який значно зменшує кількість компонентів, необхідних для взаємодії з реляційною базою даних. Ви визначаєте інтерфейс сховища, декларуєте назви методів за певною схемою (наприклад, findByEmailAndStatus ), а Spring Data створює реалізацію під час виконання.

«З Spring Data JPA ви рідко пишете SQL вручну — конвенція назв методів обробляє більшість запитів»

«Ми мали складний запит, що назви методів не могли виразити, тому ми використовували @Query з JPQL замість цього.»

JPQL

** JPQL ** (Java Persistence Query Language) — це мова запиту, яка виглядає подібно до SQL, але працює з об’ єктами Java, а не з таблицями баз даних. Ви пишете запиту на вашу модель домену, а провайдер JPA перекладає їх на відповідний діалект SQL.

«В JPQL ви пишете SELECT u FROM User u WHERE u.email = :email — ви запитуєте сутність, а не таблицю.»

«Відповідно до цієї теорії, слово «псевдо» є іменником, а не прикметником

Spring Security — ланцюг фільтрів

** Ланцюг фільтрів ** у Spring Security є послідовністю фільтрів, які проходить кожен вхідний запит HTTP. Кожен з фільтрів виконує певну дію — обробку токена JWT, перевірку захисту CSRF, надання доступу за протоколом HTTPS — перед тим, як запит досягне вашого контролера. Ви можете налаштувати ланцюжок додаванням, вилученням або зміною порядку фільтрів.

«Ланці фільтрів є місцем, де аутентифікація відбувається до того, як запит досягає контролера.»

“Я додав нетиповий фільтр до ланцюга, щоб записувати всі вхідні запити з їх ідентифікаторами кореляції.”

Spring Security — менеджер автентифікації

Менеджер розпізнавання authentication manager є центральним компонентом, який викликає Spring Security для перевірки унікальних даних користувача. Він делегує одній або декільком реалізаціям AuthenticationProvider, які перевіряють унікальні дані з бази даних, сервера LDAP або будь-якого іншого джерела.

Менеджер автентифікації перевіряє ім’я користувача і пароль і повертає заповнений об’єкт Authentication, якщо вони дійсні

«Ми маємо два провайдери автентифікації — один для звичайних користувачів і один для API-ключів — і менеджер автентифікації спробує їх в порядку»

Actuator

** Spring Boot Actuator ** додає готові до використання кінцеві точки до вашої програми, які показують інформацію про стан, метрику, деталі середовища і багато іншого. Поширені кінцеві точки включають /actuator/health, /actuator/metrics, і /actuator/info. Вони є неоціненними для моніторингу і спостережливості у виробництві.

«Балансер навантаження викликає /actuator/health кожні 30 секунд, щоб перевірити, чи живий екземпляр»

«Ми виставили кінцеву точку метрики і зібрали її з Prometheus, щоб побудувати наші панелі управління Grafana»

Profile

** Профіль ** у Spring Boot є способом визначення наборів налаштувань, які застосовуються у певних середовищах. Ви можете мати профіль dev з базою даних у пам’ яті і профіль prod, що вказує на справжній кластер PostgreSQL. Ви активуєте профілі за допомогою змінних оточення або аргументів командного рядка.

«Datasource bean створюється тільки тоді, коли активний профіль prod — локально ми використовуємо базу даних H2 в пам’яті»

Запустити програму з --spring.profiles.active=staging для використання налаштувань стажування

@ConfigurationProperties

@ConfigurationProperties є анотацією, яка прив’ язує групу пов’ язаних значень налаштування з application.properties або application.yml до типованого класу Java. Це чистіше і безпечніше, ніж введення окремих значень з @Value, особливо коли ви маєте багато пов’ язаних параметрів.

«Ми обгорнули всі налаштування платіжного шлюзу в клас @ConfigurationProperties — це робить налаштування набагато простіше керувати і документувати»

Якщо використовувати @ConfigurationProperties, Spring перевіряє поля при запуску, тому відсутня необхідна властивість швидко зазнає невдачі

Spring Boot DevTools(англ.)

** Spring Boot DevTools ** — це модуль для розробників, який прискорює цикл розробки. За допомогою цього інструменту можна стежити за змінами у шляху до вашого класу, автоматично перезапускати програму під час перекомпіляції і підтримувати LiveReload, щоб переглядач оновлювався під час зміни статичних ресурсів.

«З увімкнутими DevTools, програма перезапускається менше ніж за дві секунди, коли я зберігаю файл — набагато швидше, ніж повний холодний запуск»

«Упевніться, що DevTools не включено в вашу виробничу збірку — це залежність тільки від розробки»


Як використовувати ці терміни в розмові

Знати словник - це одне, а використовувати його природно - це інше. Ось деякі з шаблонів, які ви почуєте у справжніх обговореннях команди:

** В обзорах коду: **

«Цей клас має забагато обов’язків — розділити його на @Service для бізнес-логіки і окремий @Repository для доступу до даних»

** У обговореннях архітектури: **

«Ми використовуємо ланцюг фільтрів для централізованого обробки перевірки JWT, тому окремим контролерам не потрібно думати про автентифікацію взагалі»

** Під час сеансів зневадження: **

« Контекст програми не вдалося запустити, оскільки два боби одного типу були придатними для автоматичного підключення. Додати @Primary до того, що має пріоритет, або використовувати @Qualifier в точці введення»

В разговорах о приеме на работу:

“Автоматична конфігурація робить багато роботи за кадром. Якщо щось поводиться несподівано, запустіть з --debug щоб побачити звіт про автоконфігурацію — він показує точно, які умови пройшли і які були пропущені.”

** У розмовах DevOps: **

«Кінечна точка здоров’я з Actuator вже встановлена — вам просто потрібно налаштувати балансувальник навантаження на опитування /actuator/health і перевірити на "status": "UP"

Знання цих шаблонів допоможе вам брати участь у обговореннях, писати ясніші повідомлення про перенесення і надавати точніші пояснення, коли щось не так.


Краткий справочник

TermOne-line definition
BeanAn object managed by the Spring container
Application contextThe central container that holds and wires all beans
Auto-configurationSpring Boot automatically configures beans based on the classpath
Starter dependencyA bundled group of libraries for a specific purpose
@AutowiredTells Spring to inject a dependency automatically
Spring Data JPAGenerates repository implementations from interface method names
JPQLSQL-like query language that operates on Java entity objects
Filter chainOrdered sequence of security filters each request passes through
ActuatorProduction-ready endpoints for health checks and metrics
ProfileNamed set of configuration values for a specific environment

Поширені запитання

Про що ця стаття "Spring Boot Vocabulary: 30 Terms for Java Backend Developers (англійською)"?

Автоматичне налаштування запуску Spring, бобові, введення залежностей, дані Spring, безпека Spring і словник Java для підприємств.

Чи безкоштовна ця стаття?

Так. Усі статті на CoderSlingo, включно з цією, доступні безкоштовно без реєстрації.

Скільки часу займає читання "Spring Boot Vocabulary: 30 Terms for Java Backend Developers (англійською)"?

Приблизно 9 min.