〰️
Programming with Java
  • Програмиране с JAVA
  • Обектно-ориентирано програмиране - 1 част
    • Лабораторно упражнение 1
      • Основи на програмирането с Java за начинаещи‎
        • Oбщи термини в Java
        • Основни характеристики на JAVA‎
        • Инсталиране на JDK
        • Инсталиране на Intellij
      • Първа програма в Java
      • Системен изход в JAVA
      • Дефиниране на променливи
      • Примитивни типове данни
      • Оператори
      • If-else
      • Switch-Case
      • For loop
      • While loop
      • Do-while loop
      • Continue
      • Break
      • Задачи
    • Лабораторно упражнение 2
      • Клас
      • Обект
      • Ключова дума new
      • Запазена дума static
      • Конвенции за именуване в Java
      • Wrapper Class
      • Сравняване на
      • Нуждата Wrapper Class
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 3
      • Наследяване
      • this и super
      • Модификатори за достъп
      • Капсулиране
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 4
      • Проследяване на грешки
      • Оценяване на изрази
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 5
      • Полиморфизъм
      • Абстрактен клас
      • Интерфейс
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 6
      • Разлика между Абстрактен клас и Интерфейс
        • Разлика 1
        • Разлика 2
        • Разлика 3
        • Разлика 4
        • Разлика 5
        • Разлика 6
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 7
      • String
      • Enum
      • Обработка на изключения
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 8
      • Генерични класове
      • Генеричен метод
      • Параметри на типа в Java Generics
      • Предимства на генериците
      • Генериците работят само с референтни типове
    • Лабораторно упражнение 9
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 10
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 11
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 12
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 13
      • Упражнения за извънаудиторна заетост
      • Упражнения за извънаудиторна заетост
  • Обектно-ориентирано програмиране - 2 част
    • Лабораторно упражнение 1
      • SRP - Single Responsibility Principle
        • Задачи
      • OCP - Open-Closed Principle
        • Задачи
    • Лабораторно упражнение 2
      • LSP - Liskov Substitution Principle
        • Задачи
      • ISP - Interface Segregation Principle
        • Задачи
      • DI - Dependency Inversion Principle
        • Задачи
    • Лабораторно упражнение 3
      • Singleton
        • Задачи
      • Builder
        • Задачи
    • Лабораторно упражнение 4
      • Factory Method
      • Abstract Factory
      • Задачи
    • Лабораторно упражнение 5
    • Лабораторно упражнение 6
      • Decorator
      • Bridge
        • Композиция
      • Задачи
    • Лабораторно упражнение 7
      • Adapter
      • Задачи
    • Лабораторно упражнение 8
      • Composite
      • Proxy
      • Задачи
    • Лабораторно упражнение 9
    • Лабораторно упражнение 10
      • Visitor
      • State
      • Задачи
    • Лабораторно упражнение 11
      • Observer
      • Задачи
    • Лабораторно упражнение 12
      • Chain of Responsibility
      • Command
      • Задачи
    • Лабораторно упражнение 13
  • Интернет технологии 2023
    • Лабораторно упражнение 1
      • HTTP протокол
        • Синтаксис на URL
        • HTTP съобщения
        • Методи за HTTP заявка
        • Кодове за състояние на HTTP отговор
      • Postman
        • Изпращане на заявка с Postman
        • Получаване на отговор
      • Задачи за работа с Postman
    • Лабораторно упражнение 2
      • Работа с Tomcat
      • Maven
      • Създаване на Maven проект в IntelliJ Ultimate Edition
      • Създаване на Maven проект в IntelliJ Community Edition
      • Създаване на Maven проект в Eclipse IDE
    • Лабораторно упражнение 3
      • Java Servlets
      • Жизнен цикъл на сървлета
      • Създаване на сървлети
      • Задачи за създаване на сървлети
    • Лабораторно упражнение 4
      • Extensible Markup Language
      • Java Architecture for XML Binding
      • JavaScript Object Notation
      • Задачи
    • Лабораторно упражнение 5
    • Лабораторно упражнение 6
      • Spring Boot
      • Създаване на Spring boot проект
      • Структура на Spring Boot проект
        • Файлът pom.xml
        • Main клас в Spring Boot
        • Управление на конфигурацията с application.properties
      • Задача
    • Лабораторно упражнение 7
      • Комуникационен поток и CRUD операции
      • ResponseEntity
      • Избрани анотации
      • Задача
    • Лабораторно упражнение 8
      • Lombok
      • Data transfer object (DTO)
      • Обработване на изключения в Spring Boot приложение
        • Клас Optional<T>
      • Валидиране на данните от заявката
      • Задачи
    • Лабораторно упражнение 9-10
      • Конфигуриране на PostgreSQL DB
      • Jakarta Persistence анотации
      • Repository слой
      • Задачи
    • Лабораторно упражнение 11
      • Проследяване на сесии
      • Филтри и FilterChain
      • Spring Security
        • Добавяне на Spring Security в Spring Boot приложение
        • Конфигуриране на филтри
        • Удостоверяване със Spring Security
        • Защита на метод със Spring Security
      • Задача
    • Лабораторно упражнение 12
      • JSON Web Token
      • Защита с помощта на JWT
      • Задача
    • Лабораторно упражнение 13
  • Програмиране за мобилни и Интернет устройства
    • Лабораторно упражнение 1
      • Задачи
    • Лабораторно упражнение 2
      • Среда за разработване
        • Създаване на проект
        • Структора на проект
        • Виртуално устройство с Android OS
      • Задача
    • Лабораторно упражнение 3
      • Activity
      • Layout
        • XML описание
      • Задача
    • Лабораторно упражнение 4
      • Activity Lifecycle
      • Intent
      • Слушатели на събитията и методи за обратно извикване
      • Задача
    • Лабораторно упражнение 5
      • Слушатели на събитията и методи за обратно извикване
      • Задача
    • Лабораторно упражнение 6
      • Фрагменти
      • DialogFragment
      • Задача
    • Лабораторно упражнение 7
      • Примери
        • BaseAdapter
        • ArrayAdapter
        • Custom ArrayAdapter
      • RecyclerView
        • Пример
      • CardView
      • Задача
    • Лабораторно упражнение 8
      • Runnable
      • HandlerThread
      • ThreadPoolExecutor
      • Задача
    • Лабораторно упражнение 9
      • Задача
      • Задача
      • Пример
  • Интернет Технологии
    • Лабораторно упражнение 1
      • Инсталиране и настройка на необходимата среда за работа в упражненията
      • Maven
      • Създаване на Maven проект в Eclipse IDE
      • Създаване на Maven проект в IntelliJ
      • Работа с Tomcat
      • Задача
    • Лабораторно упражнение 2
      • HTML форми
      • Cascading Style Sheets (CSS)
        • CSS селектори
        • Някои CSS свойства
      • Задача
    • Лабораторно упражнение 3
      • Java Servlets
      • Жизнен цикъл на сървлета
      • Създаване на сървлети
      • Задачи
    • Лабораторно упражнение 4
      • Java Server Pages технология. Същност и детайли
      • Пренасочване между Servlet и JSP
      • Задачи
    • Лабораторно упражение 5
      • Build pattern
      • JavaBean
      • Задачи
    • Лабораторно упражение 6
      • Проследяване на сесии
      • Управление на бисквитки (Cookies)
      • Задачи
    • Лабораторно упражнение 7
      • Проследяване на сесии
      • Управление на бисквитки (Cookies)
      • Servlet Filter
      • Задачи
    • Лабораторно упражнение 8
      • Servlet Filter
      • Прихващане на грешки
      • Задачи
    • Лабораторно упражнение 9
      • Extensible Markup Language
      • JavaScript Object Notation
        • Fetch
      • Задача
    • Лабораторно упражнение 10
      • Java Architecture for XML Binding
      • Задачи
Powered by GitBook
On this page
  • Методът main()
  • Анотацията @SpringBootApplication
  • Класът SpringApplication

Was this helpful?

  1. Интернет технологии 2023
  2. Лабораторно упражнение 6
  3. Структура на Spring Boot проект

Main клас в Spring Boot

В генерирания проект можете да откриете, че Spring Initializr е генерирал Java клас с Java main() метод в него.

package com.manning.sbip.ch01;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootAppDemoApplication {
      public static void main(String[] args) {
             SpringApplication.run(SpringBootAppDemoApplication.class, args);
      }
}

Нека разгледаме следните компоненти на генерирания Java файл:

1. Метода main().

2. Употребата на анотацията @SpringBootApplication

3. Ролята на класа SpringApplication

Методът main()

За да стартирате уеб приложение, вие изграждате и пакетирате компонентите на приложението в WAR или EAR архивен файл и го използвате в мрежата (напр. в Apache Tomcat) или на application сървър (напр. Red Hat JBoss). Spring Boot опростява този процес до известна степен. Не ви принуждава да създавате WAR или EAR файл за вашето приложение. Вместо това ви позволява да стартирате приложението Spring Boot като обикновено Java приложение, използвайки конвенционален main() метод.

Въпреки че Spring Boot следва познатия подход “Keep it simple”, за да направи нещата прости за разработчиците, изпълнява голямо количество тежка работа зад кулисите. Например базирано на сървлет уеб приложение може да работи само в контейнер като Apache Tomcat или Jetty. Spring Boot позволява тази поддръжка чрез използването на вграден Apache Tomcat сървър в приложението по подразбиране. По този начин при стартиране на приложението, използвайки метода main(), Spring Boot стартира вградена инстанция на Apache Tomcat сървър и изпълнява уеб приложението вътре в него. Ако проучите допълнително зависимостта spring-boot-starter-web, можете да откриете транзитивна зависимост към модула spring-boot-starter-tomcat.

Анотацията @SpringBootApplication

Може да забележите, че класът в генерирания Java файл е анотиран с @SpringBootApplication анотация. Това е удобна анотация, която съдържа в себе си три анотации: @EnableAutoConfiguration, @ComponentScan и @SpringBootConfiguration, всяка от които изпълнява специфична задача в приложението:

  • @EnableAutoConfiguration – осигурява необходимата поддръжка за автоматично конфигуриране на приложението въз основа на наличните JAR зависимости в неговия classpath.

  • @ComponentScan - осигурява поддръжка за сканиране на пакетите за Spring компоненти. Компонент в Spring е Java bean, който се управлява от Spring и е антотиран с @Component, @Bean или друга специализирана анотация за компонент. При наличието на анотация @ComponentScan, Spring Boot приложението сканира за идентифицирането на всички компоненти, присъстващи в основния пакет и подпакети под него, за да управлява впоследствие техния жизнен цикъл.

  • @SpringBootConfiguration - показва, че този клас е Spring конфигурационен клас. Той е мета-анотиран със Spring @Configuration анотация, така че конфигурациите в анотирания клас могат да бъдат намерени автоматично от Spring Boot.

Имайте предвид, че основният клас на Spring Boot приложението трябва да се намира в root пакета, тъй като анотацията @SpringBootApplication е конфигурирана в този клас. @SpringBootApplication анотацията използва основния пакет като базов пакет. Така базовият пакет и всички други подпакети се сканират автоматично от Spring Boot за зареждане на Spring компоненти (напр. класове, конфигурирани с @Component, @Configuration и други Spring анотации) и други типове.

Класът SpringApplication

Следващият и последен компонент е използването на SpringApplication в генерирания Java файл. Този клас се предоставя от Spring Boot за удобно зареждане на Spring Boot приложение. През повечето време ще използвате статичния метод run() на SpringApplication, за да стартирате вашето приложение. Spring Boot изпълнява няколко дейности, докато изпълнява метода run():

1. Създава екземпляр на ApplicationContext въз основа на библиотеките, присъстващи в classpath

2. Регистрира CommandLinePropertySource, за да изложи аргументите на командния ред като свойства на Spring

3. Опреснява ApplicationContext, създаден в стъпка 1, за да зареди всички сингълтон beans

4. Задейства ApplicationRunners и CommandRunners, конфигурирани в приложението

ApplicationContext

Повечето Java приложения, които разработвате, се състоят от обекти. Тези обекти взаимодействат помежду си и между тях съществуват зависимости. За да управлява ефективно създаването на обекти и взаимозависимостите, Spring използва принципа за инжектиране на зависимости (DI). Това инжектиране на зависимости или подход за инверсия на управлението (IoC) позволява на Spring да създава обектите (или beans на езика на Spring) и да инжектира зависимостите външно. Дефинициите на bean се представят на Spring или чрез файловете с дефиниции на XML bean (напр. applicationContext.xml), или чрез базираните на анотации конфигурации (@Configuration анотация). Spring зарежда bean дефинициите и ги поддържа налични в Spring IoC контейнера. Интерфейсът ApplicationContext действа като Spring IoC контейнер. Spring предоставя изобилие от имплементации на ApplicationContext въз основа на типа на приложението (Servlet или Reactive приложение), конфигурациите на дефинициите на beans (напр. за зареждане от classpath или анотация) и т.н.

Класът SpringApplication се опитва да създаде екземпляр на ApplicationContext въз основа на JAR зависимостите, присъстващи в classpath. Уеб приложението Spring Boot може да бъде базирано на сървлет или реактивен тип. Използвайки техниките за зареждане на класове на Spring и въз основа на наличността на класовете в classpath, Spring извежда типа на текущото приложение. След като типът на приложението е известен, Spring Boot прилага стратегията по-долу, за да зареди контекста на приложението:

  • Ако приложението е идентифицирано като уеб приложение, базирано на Servlet, Spring Boot се опитва да създаде екземпляр на клас AnnotationConfigServletWebServerApplicationContext.

  • Ако приложението е от реактивен тип, Spring Boot създава екземпляр на класа AnnotationConfigReactiveWebServerApplicationContext.

  • Ако приложението не е нито базирано на Servlet, нито реактивно, Spring Boot се опитва да създаде екземпляр на клас AnnotationConfigApplicationContext.

Spring Boot приложението се стартира като използвате статичния метод run() на класа SpringApplication. Въпреки че използването на статичния метод run() е полезно, Spring Boot допълнително ви позволява да създадете екземпляр на клас SpringApplication, за да персонализирате режима за стартиране на приложението. Например, ако знаете типа на приложението, можете директно да го зададете в екземпляра SpringApplication, както е показано по-долу.

SpringApplication също така предоставя няколко метода за настройка, така че можете да контролирате различни функции на Spring Boot, като например задаване на допълнителни Spring профили или задаване на средство за зареждане на ресурси.

PreviousФайлът pom.xmlNextУправление на конфигурацията с application.properties

Last updated 2 years ago

Was this helpful?