Inversion of Control (Инверсия управления)

Содержание

Слайд 2

Инверсия управления Это определенный набор рекомендаций, позволяющих проектировать и реализовывать приложения

Инверсия управления

Это определенный набор рекомендаций, позволяющих проектировать и реализовывать приложения используя

слабое связывание отдельных компонентов. То есть, для того чтобы следовать принципам Инверсии управления необходимо:
Реализовывать компонент, отвечающие за конкретную задачу;
Компоненты должны быть независимыми друг от друга;
Компоненты не должны зависеть от конкретной реализации друг друга.
Слайд 3

Dependency Injection (Внедрения зависимостей)

Dependency Injection (Внедрения зависимостей)

Слайд 4

Внедрения зависимостей Является одним из видов реализации инверсии управления и определяет

Внедрения зависимостей

Является одним из видов реализации инверсии управления и определяет следующие

рекомендации:
Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций.
Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Если существуют два связанных класса, то необходимо реализовывать связь между ними не напрямую, а через интерфейс. 
Слайд 5

Слайд 6

Проблема № 1. MusicPlayer сильно зависит от ClassicMusic. Класс MusicPlayer заточен

Проблема № 1.
MusicPlayer сильно зависит от ClassicMusic. Класс MusicPlayer заточен

на работы только с ClassicMusic.
Решение
Использовать интерфейс, который будет обобщать музыкальные жанры
Слайд 7

Решение проблемы № 1

Решение проблемы № 1

Слайд 8

Проблема № 2. MusicPlayer сам создает свои зависимости. Это архитектурно неправильно

Проблема № 2.
MusicPlayer сам создает свои зависимости. Это архитектурно неправильно –

противоречит принципу IoC (Inversion of Control)
Решение
Использовать принцип IoC (Inversion of Control)
Слайд 9

Решение проблемы № 2

Решение проблемы № 2

Слайд 10

Слайд 11

Что такое Spring ? Spring Framework представляет собой контейнер внедрения зависимостей.

Что такое Spring ?

Spring Framework представляет собой контейнер внедрения зависимостей. Это не

один какой-то конкретный фреймворк, а скорее общее названия для целого ряда небольших фреймворков, каждый из которых выполняет какую-то свою работу. Например, работа с БД, компонент для разработки Web – приложений, компонент безопастности, и множество других компонентов.
Слайд 12

Зачем он нужен? Один из самых популярных web – фреймворков в

Зачем он нужен?

Один из самых популярных web – фреймворков в мире.
Самый

популярный Java – фреймворк.
Востребован по всеми миру.
Облегчает разработку приложений на Java.
В больших приложениях огромное количество объектов и тяжело поддерживать иерархию между ними. Spring берет на себя работу с ними и облегчает работу.
Мы описываем объекты, которые необходимы для работы приложения, а Spring сам создает эти объекты и берет на себя управление этими объектами.
Spring сам внедряем все необходимые зависимости в объекты (связывает объекты между собой). Разработчику необходимо только описать эту связь.
Слайд 13

Bean Это просто Java объекты. Когда Java объекты создаются с помощью

Bean

Это просто Java объекты. Когда Java объекты создаются с помощью Spring’а

их называют бинами. Бины создаются из Java классов, так же как и обычные объекты.
Контекст — это набор бинов (объектов). Обращаясь к контексту — мы можем получить нужный нам бин (объект) по его имени.
Кроме того, мы можем попросить спринг самого поискать в своем контексте нужный нам бин и передать его в наш метод.
Слайд 14

Как сделать класс бином ? При помощи аннотаций: Необходимо написать аннотацию

Как сделать класс бином ?

При помощи аннотаций:
Необходимо написать аннотацию @Componentнад тем

классом Bean, которого хотим создать. Spring будет сканировать все классы и когда заметит данную аннотацию, то автоматически создат Bean из этого класса.
При помощи xml файла:
Слайд 15

Scope Bean singleton - По умолчанию. Spring контейнер создает единственный экземпляр

Scope Bean

singleton - По умолчанию. Spring контейнер создает единственный экземпляр бина. Как

правило, используется для бинов без сохранения состояния(stateless)
prototype - Spring контейнер создает любое количество экземпляров бина. Новый экземпляр бина создается каждый раз, когда бин необходим в качестве зависимости, либо через вызов getBean(). Как правило, используется для бинов с сохранением состояния(stateful)
request - Жизненный цикл экземпляра ограничен единственным HTTP запросом; для каждого нового HTTP запроса создается новый экземпляр бина. Действует, только при использовании ApplicationContext
session - Жизненный цикл экземпляра ограничен в пределах одной и той же HTTP Session. Действует, только при использовании ApplicationContext
global session - Жизненный цикл экземпляра ограничен в пределах глобальной HTTP Session. Действует, только при использовании ApplicationContext
Слайд 16

@Component Эта аннотация используется в классах для обозначения компонента Spring. Аннотация

@Component

Эта аннотация используется в классах для обозначения компонента Spring. Аннотация @Component помечает класс

Java , как Bean или Component, так что механизм ComponentScan Spring может добавить его в контекст приложения.
Слайд 17

@Autowired Аннотация @Autowired говорити Spring’у, что надо внедрит источник данных, настроенный

@Autowired

Аннотация @Autowired говорити Spring’у, что надо внедрит источник данных, настроенный с помощью

метода @Bean.
Два способа внедрения:
1)
2)
Слайд 18

@Bean Эта аннотация используется на уровне метода. @Bean работает вместе с

@Bean

Эта аннотация используется на уровне метода. @Bean работает вместе с  @Configuration.  Метод с этой

аннотацией, работает как идентификатор компонента, а также создает и возвращает фактический компонент.
Слайд 19

@ComponentScan Аннотация @ComponentScan говорит Spring’у: Посмотри на все классы в том

@ComponentScan

Аннотация @ComponentScan говорит Spring’у: Посмотри на все классы в том же пакете, что и конфигурация

контекста, если они выглядят как Spring Bean.
Это означает, что, если класс находится в пакете, например, com.netcracker , Spring будет сканировать каждый пакет, включая подпакеты, который начинается с netcracker для поиска потенциальных компонентов Spring.
Чтобы Spring понял, что класс является бином необходимо использовать аннотацию @Component
Слайд 20

Sprint Boot

Sprint Boot

Слайд 21

Зачем он нужен? “Берет на себя все рутинные действия по созданию

Зачем он нужен?

“Берет на себя все рутинные действия по созданию Spring-приложений

и ускоряет вашу работу настолько, насколько это возможно.”
Spring Boot позволяет легко создавать полноценные, производственного класса Spring-приложения, из коробки. В него включены сторонние библиотеки, чтобы запустить с минимум усилиями.
Слайд 22

В чем преимущества Spring Boot по сравнению с обычным Spring-гом? Spring

В чем преимущества Spring Boot по сравнению с обычным Spring-гом?

Spring

Boot упрощает использование Spring Framework. Spring обеспечивает слабо связанное приложение — это отличная функция. Однако, когда есть несколько слабо связанных блоков, отслеживание их становится утомительной и неблагодарной задачей. Тут-то Spring Boot и помогает упростить все, не предлагая никакой функции конфигурации.
• Spring Boot не требует развертывания war-файлов • Создает автономные приложения • Помогает напрямую встроить в приложение Tomcat или Jetty • Не требует XML-конфигурации • Направлен на уменьшение объема исходного кода • Имеет дополнительную функциональность «из коробки» • Простота запуска • Простая настройка и управление
Spring Boot использует Spring Framework в качестве своей основы.
Слайд 23

Точка входа в Spring Boot приложение Метод main() используется Spring Boot

Точка входа в Spring Boot приложение

Метод main() используется Spring Boot методом SpringApplication.run() для запуска

приложения. Метод run() возвращает ApplicationContext и этому приложению отдаются все бины, которые были созданы приложением или автоматически добавлены благодаря Spring Boot.