Skip to content

Latest commit

 

History

History
76 lines (47 loc) · 5.1 KB

SpringCore.md

File metadata and controls

76 lines (47 loc) · 5.1 KB

ApplicationContext

ApplicationContext - это главный интерфейс в Spring-приложении, который предоставляет информацию о конфигурации приложения.

Контекст - набор бинов (объектов). Обращаясь к контексту можно получить нужный бин (объект) по его имени, типу или чему-то еще.

У ApplicationContext есть большое количество реализаций, они отличаются друг от друга тем, каким способом задаются мета-данные и где хранится эта конфигурация.

  • ClassPathXmlApplicationContext — метаданные конфигурируются XML-файлом(-ами) и они лежат в classpath, т. е. в ресурсах модуля;
  • FileSystemXmlApplicationContext — метаданные тоже конфигурируются XML-файлом(-ами), но они находятся где-то в файловой системе, например, /etc/yourapp/spring-context.xml;
  • AnnotationConfigApplicationContext — метаданные конфигурируются с помощью аннотаций

Современным способом конфигурирования считаются аннотации AnnotationConfigApplicationContext.

@Configuration
@ComponentScan
public class Main {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext(Main.class);
    }
}

Способы конфигурации приложения

Указать спрингу, какие именно объекты нужны для работы можно тремя способами, которые можно комбинировать между собой:

  1. При помощи XML файла конфикурации - самый низкоприоритетный способ, но многие приложения до сих пор его используют
  2. Java аннотаций и немного XML - современный способ, наиболее приоритетный
  3. Вся конфигурация на Java коде (создание объектов, используя java-код) - современный способ

Основные зависимости (pop.xml)

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>...</version>
</dependency>

spring-core
spring-beans
spring-context


IoC / DI

IoC (Inversion of Control) - Инверсия управления - архитектурный подход, при котором сущность не сама создает свои зависимости, а зависимости подаются извне.

Может реализовываться как механизм передачи процесса выполнения кода/программы фреймворку. При использовании библиотеки вы сами прописываете в своем коде какой метод какого объекта вызвать, а в случае с фреймворками — чаще всего уже фреймворк будет вызывать в нужный ему момент тот код, который вы написали. То есть , тут уже не вы управляете процессом выполнения кода/программы, а фреймворк это делает за вас. Вы передали ему управление (инверсия управления).

(Dependency Inversion) - инверсия зависимостей - попытки не делать жестких связей между вашими модулями/классами, где один класс напрямую завязан на другой;

DI (Dependency Injection) - Внедрение зависимости — процесс предоставления внешней зависимости программному компоненту. Вместо ручного создания объектов, Спринг создает бины и передает их в методы по конфигурации.

В технологии внедрения зависимостей компоненты не создают и не поддерживют жизненный цикл других компонентов компонентов, от которых он зависят, а полагаются в этом на отдельный объект (контейнер), который создаст все нужные компоненты и внедрит их в другие пкомпоненты, которые в них нуждаются.



Вернуться назад