Похожие презентации:
3. Dependencies Injections
1. Dependencies injection
Всё, что вы хотели узнать, но боялись2. Зависимости
Зависимости возникают, когда компонент Aпрограммы нуждается в других компонентах
(B, C, D…) для того, чтобы выполнять свою
работу
В таких случаях, компоненты B, C, D…
называются зависимостями компонента A (A
зависит от B, C, D)
A
B
C
D
3. А в коде?
4. Способы разрешения зависимостей
● Создание зависимостей в зависимом классе● Внедрение зависимостей в пользовательском классе
● Ответственность за обработку зависимостей
возлагается на третью сторону (IoC)
5. Inversion of Control (IoC)
IoC – принцип объектно-ориентированного программирования, используемыйдля уменьшения связанности в программе
Основная идея: предоставить управление нашим кодом третьей стороне
(фреймворку)
Мы можем достичь Inversion of Control с помощью:
➔ Strategy design pattern
➔ Service Locator pattern
➔ Factory pattern
➔ Dependency Injection (DI)
6. IoC(DI)-контейнер
IoC(DI)-контейнер – фреймворк (или часть фреймворка), который беретответственность за создание и предоставление объектов и,
следовательно, за разрешение их зависимостей
7. Ближе к Spring Boot
8.
9. Bean
Bean – объект, который управляетсяSpring-ом и существует внутри его DIконтейнера
Бином является почти все в Spring —
сервисы, контроллеры, репозитории и
т.п.
Все приложение состоит из набора
бинов. Их можно регистрировать,
получать в качестве зависимостей,
проксировать, мокать и т.д.
10. И как они управляются?
@PostContructвызывается
где-то тут
Выполнение метода
afterPropertiesSet,
если бин реализует
интерфейс
InitializingBean
@PreDestroy
вызывается
где-то здесь
Выполнение метода
destroy, если бин
реализует
интерфейс
DisposableBean
Метод init будет вызван
здесь, если
@Bean(initMethod="init")
Метод destroyBean будет вызван здесь,
если @Bean(destroyMethod ="destroyBean")
11. И как их создавать?
1. @Configuration и @Bean2. @Component
1. @Repository
2. @Service
3. @Controller
12. @Configuration и @Bean
@Configuration – аннотация говорит Spring Boot, что в данном классе происходитсоздание бинов.
@Bean – аннотация используется для указания того, что в аннотированном
методе происходит создание бина
13. @Component
@Component – базовая аннотация для определения бина14. Но ведь было ещё 3?
@Repository - помечается класс, который отвечает за работу с хранилищамиданных. Как правило, используется для работы с БД. Классы с такой аннотацией
имеют дополнительную обработку ошибок, связанных с работой БД
@Service - ничем не отличается от @Component. Документация Spring
рекомендует использовать именно эту аннотацию для классов, в которых
находится бизнес логика
@Controller - помечается класс, отвечающий за обработку http запросов. В таком
классе можно создавать обработчики для разных запросов
15. И как это всё внедрять?
У внедрения три пути:● Field Injection
● Setter Injection
● Constructor Injection
16. Field Injection
17. Setter Injection
18. Constructor Injection
19. Configuration bean
20. Циклические зависимости
При внедрении через конструктор могутвозникать циклические зависимости
A
Разрешить их можно, заменив внедрение
через конструктор на внедрение через
сеттер, или с помощью аннотации @Lazy
B
21. Bean Scopes
@Scope(scopeName = "singleton")Последняя версия Spring framework определяет 6 типов “областей” (scopes):
singleton (один и тот же экземпляр в рамках всего приложения, используется по
умолчанию)
prototype (новый экземпляр создается каждый раз, когда объект запрашивается у
контейнера)
Существующие только для веб-приложений:
request (новый экземпляр для каждого нового запроса, @RequestScope)
session (один и тот же экземпляр в рамках одной и той же сессии, @SessionScope)
application (один и тот же экземпляр для одного ServletContext, @ApplicationScope)
websocket (один и тот же экземпляр в рамках одной и той же WebSocket сессии)
22. Спасибо за внимание!
Спасибоза внимание!
Программирование