Similar presentations:
Inversion of Control (Инверсия управления)
1.
Inversion of Control(Инверсия управления)
2.
Инверсия управленияЭто
определенный
набор
рекомендаций,
позволяющих проектировать и реализовывать
приложения используя слабое связывание отдельных
компонентов. То есть, для того чтобы следовать
принципам Инверсии управления необходимо:
• Реализовывать
компонент,
отвечающие
за
конкретную задачу;
• Компоненты должны быть независимыми друг от
друга;
• Компоненты не должны зависеть от конкретной
реализации друг друга.
3.
Dependency Injection(Внедрения зависимостей)
4.
Внедрения зависимостейЯвляется одним из видов реализации инверсии
управления и определяет следующие рекомендации:
• Модули верхних уровней не должны зависеть от модулей
нижних уровней. Оба типа модулей должны зависеть от
абстракций.
• Абстракции не должны зависеть от деталей. Детали
должны зависеть от абстракций.
Если существуют два связанных класса, то необходимо
реализовывать связь между ними не напрямую, а
через интерфейс.
5.
6.
Проблема № 1.MusicPlayer сильно зависит от ClassicMusic. Класс
MusicPlayer заточен на работы только с
ClassicMusic.
Решение
Использовать интерфейс, который
будет
обобщать музыкальные жанры
7.
Решение проблемы № 18.
Проблема № 2.MusicPlayer сам создает свои зависимости. Это
архитектурно неправильно – противоречит
принципу IoC (Inversion of Control)
Решение
Использовать принцип IoC (Inversion of Control)
9.
Решение проблемы № 210.
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 Beansingleton - По умолчанию. 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 Boot21.
Зачем он нужен?“Берет на себя все рутинные действия по
созданию 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.