225.80K
Category: programmingprogramming

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

1.

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

2.

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

3.

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

4.

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

5.

6.

Проблема № 1.
MusicPlayer сильно зависит от ClassicMusic. Класс
MusicPlayer заточен на работы только с
ClassicMusic.
Решение
Использовать интерфейс, который
будет
обобщать музыкальные жанры

7.

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

8.

Проблема № 2.
MusicPlayer сам создает свои зависимости. Это
архитектурно неправильно – противоречит
принципу IoC (Inversion of Control)
Решение
Использовать принцип IoC (Inversion of Control)

9.

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

10.

11.

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

12.

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

13.

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

14.

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

15.

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 помечает класс Java , как Bean
или
Component,
так
что
механизм
ComponentScan Spring может добавить его в
контекст приложения.

17.

@Autowired
Аннотация @Autowired говорити Spring’у, что
надо внедрит источник данных, настроенный с
помощью метода @Bean.
Два способа внедрения:
1)
2)

18.

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

19.

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

20.

Sprint Boot

21.

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

22.

В чем преимущества 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
методом SpringApplication.run() для запуска приложения.
Метод run() возвращает ApplicationContext и этому
приложению отдаются все бины, которые были созданы
приложением или автоматически добавлены благодаря
Spring Boot.

24.

Конец
English     Русский Rules