Похожие презентации:
Spring Core
1.
2.
Что такое SpringSpring один из самых популярных фреймворков для J2EE. Разработчики
по всему миру используют Spring для создания надёжных и качественных
приложений.
Spring Framework — это платформа Java, которая обеспечивает
комплексную поддержку инфраструктуры для разработки Javaприложений. Spring управляет инфраструктурой, чтобы вы могли
сосредоточиться на своем приложении.
3.
Spring FrameworkSpring Framework
предоставляет большое
количество модулей, которые
можно использовать в
зависимости от требований
приложения.
4.
IoC и DI1. Инверсия управления — абстрактный принцип, постулирующий факт
задания потока выполнения некой внешней по отношению к вам сущностью.
2. Dependency Inversion – Тоже самое, что и в SOLID
3. Dependency Injection – один из видов инверсии управления. Это процесс
внедрения одного объекта в другой.
При написании действительно крупных и сложных проектов разработчики
сталкиваются с необходимостью делать классы приложения как можно более
независимыми друг от друга для возможности повторного использования и
юнит-тестирования.
Именно внедрение зависимостей устанавливает связи между этими
классами, при этом сохраняя их независимость друг от друга.
5.
IoC и DIИнверсия управления в заключается в том, что мы передаем ряд ответственностей Spring контейнеру:
1.
Конфигурирование объектов.
2.
Инициализация объектов.
3.
Внедрение одних объектов в другие (Dependency injection)
4.
Управление жизненным циклом объектов.
6.
Поднятие контекста7.
КонфигурацияЕсть 3 основных вида конфигурации:
1. Xml – конфигурация прописывается в xml файлах.
2. Java – Создание бинов происходит посредством java кода.
3. Аннотации – Классы на основе, которых будут созданы бины аннотируются
stereotype аннотациями.
К следующему занятию знать все виды stereotype аннотаций, а также преимущества и
недостатки каждого из подходов конфигурации.
8.
КонфигурацияJava POJO классы поступают в Spring
Container, который на основании
конфигурации, выдаёт приложение,
готовое к использованию.
9.
BeanDefinitionХранит множество важных метаданных, необходимых для создания бина:
1. name – уникальное имя бина, служит идентификатором.
2. class – Полное имя класса, на основе которого должен быть создан.
3. Аргументы конструктора.
4. LazyInit – определяет, нужно ли создавать бин лениво.
5. factoryBeanName и factoryMethodName.
6. Scope.
7. Init/destroy методы.
10.
КонтейнерВ Spring есть 2 основных вида контейнеров:
1. BeanFactory – предоставляет базовый IoC & DI функционал.
2. ApplicationContext – помимо базового IoC & DI добавляет EE специфичные возможности.
Feature
BeanFactory
ApplicationContext
Bean instantiation/wiring
Yes
Yes
Integrated lifecycle management
No
Yes
Automatic BeanPostProcessor registr No
ation
Yes
Automatic BeanFactoryPostProcessor
registration
No
Yes
Convenient MessageSource access
(for internationalization)
No
Yes
Built-in ApplicationEvent publication
mechanism
No
Yes
11.
Вопрос на 1 баллКак будут созданы бины лениво или при старте?
12.
ОтветЗависит от того, какой тип контейнера вы используете.
• BeanFactory создает бины по необходимости (лениво).
• ApllicationContext создает бины при старте приложения (если scope singleton).
13.
Реализации ApplicationContext ContainerЧаще всего используются следующие реализации AppicationContext:
• FileSystemXmlApplicationContext - загружает данные о бине из XML файла. При
использовании этой реализации в конструкторе необходимо указать полный
адрес конфигурационного файла.
• ClassPathXmlApplicationContext - этот контейнер также получает данные о бине
из XML файла. Но в отличие от FileSystemApplicationContext, в этом случае
необходимо указать относительный адрес конфигурационного файла
(CLASSPATH).
• WebXmlApplicationContext - эта реализация ApplicationContext получает
необходимую информацию из веб-приложения.
14.
BeanFactoryPostProcessorЕсли класс помечен
аннотацией DeprecatedClass с
указанием на новую версию,
то beanCalssName в
BeanDefinition будет изменен
на newImpl класс из
DeprecatedClass.
15.
BeanPostProcessorСоздаем
собственную
аннотацию, если
класс
аннотирован ею,
то при вызове
методов будет
замерено время
работы и
выведено в
консоль.
16.
Поднятие контекста17.
Spring Потрошительhttps://www.youtube.com/watch?v=BmBr5diz8WA&list=PL6yLoZ_3Y0HKGL3F7vv2SNSrA3TkbXtBX&index=2 1 часть
https://www.youtube.com/watch?v=cou_qomYLNU&list=PL6yLoZ_3Y0HKGL3F7vv2SNSrA3TkbXtBX&index=3 2 часть
На следующем занятии спрошу рандомного человека про 3-х фазный конструктор, если кто-то не ответит -1
балл.
18.
ScopeSpring поддерживает 6 видов scope, 4 из которых доступны в web версиях ApplicationContext.
1.
Singleton scope – Бин с такой областью видимости будет создан в единственном экземпляре в контейнере при
поднятии контекста. Является scope по умолчанию.
2.
Prototype scope – Каждый раз создается новый инстанс объекта. Т.е. при каждом запросе к контейнеру на
получение prototype бина будет создаваться новый объект.
Web specific scopes:
1.
Request scope – Бин с такой видимостью будет создаваться заново на каждый HTTP запрос. Т.е. жизненный
цикл бина привязан к жизненному циклу запроса. Такой бин является атрибутом объекта Request.
2.
Session scope – Жизненый цикл такого бина привязывается к объекту HTTP Session. Такой бин является
атрибутом объекта Session.
3.
Application scope – Бин с такой видимостью будет создан один раз для веб приложения. От singleton
отличается тем, что является синглтоном для веб приложения, а не контейнера. В рамках одного
ApplicationContext может быть несколько веб приложений. Такой бин является атрибутом объекта
ServletContext.
19.
Проблема зависимости бинов с разными scopeВозможна ситуация, когда один бин зависит от другого, при этом у них разные жизненные
циклы. На пример singleton бин А зависит от prototype бина В.
20.
Aware интерфейсыSpring предоставляет ряд Aware интерфейсов, которые позволяют получить доступ к инфраструктуре. Один из таких
интерфейсов – ApplicationContextAware.
21.
Вопрос на 0.5 баллаКакие еще есть Aware интерфейсы?
22.
@LookupСуть в том, что мы создаем метод-заглушку в
бине Car и помечаете его специальным
образом – аннотацией @Lookup.
Этот метод должен возвращать бин Passenger,
каждый раз новый.
Контейнер Spring под капотом создаст прокси и
переопределит этот метод и будет вам
выдавать новый экземпляр бина Passenger при
каждом вызове аннотированного метода. Даже
если в вашей заглушке он возвращает null.
23.
Java configДанный подход применим, если мы
используем java конфигурацию.
24.
Жизненный цикл биновSpring позволяет определить init/destroy методы для бинов, сделать это можно несколькими способами:
1. @PostConstruct и @PreDestroy
2. Так же есть интерфейсы LifeCycle и SmartLifeCycle – читаем сами!
3. InitializingBean, DisposableBean
25.
Связывание и @AutowiredПроцесс внедрения зависимостей в бины при инициализации называется Spring Bean Wiring.
Считается хорошей практикой задавать явные связи между зависимостями, но в Spring
предусмотрен дополнительный механизм связывания @Autowired. Аннотация может
использоваться над конструктор, поле, сеттер-метод или метод конфигурации для связывания по
типу. Если в контейнере не будет обнаружен необходимый для вставки бин, то будет выброшено
исключение, либо можно указать @Autowired(required = false), означающее, что внедрение
зависимости в данном месте не обязательно.
Типы связывания:
autowire byName,
autowire byType,
autowire by constructor,
autowiring by @Autowired and @Qualifier annotations
Начиная со Spring Framework 4.3, аннотация @Autowired для конструктора больше не требуется,
если целевой компонент определяет только один конструктор. Однако, если доступно несколько
конструкторов и нет основного/стандартного конструктора, по крайней мере один из конструкторов
должен быть аннотирован @Autowired, чтобы указать контейнеру, какой из них использовать.
26.
АОПАОП — аспектно-ориентированное программирование — это парадигма, направленная
на повышение модульности различных частей приложения за счет разделения сквозных
задач. Для этого к уже существующему коду добавляется дополнительное поведение,
без изменений в изначальном коде. Иными словами, мы как бы навешиваем сверху на
методы и классы дополнительную функциональность, не внося поправки в
модифицируемый код.
Примерами сквозных задач могут служить:
1.
Логирование
2.
Транзакционность
3.
Политика безопасности
27.
Основные понятия АОПСовет (Advice) - Это фактическое действие, которое должно быть предпринято до и/или после выполнения метода.
Это конкретный код, который вызывается во время выполнения программы.
Точка соединения (Join point) - Это такая точка в приложении, где мы можем подключить аспект. Другими
словами, это место, где мы можем внедрить дополнительную логику (advice).
Аспект (Aspect) – модуль или класс, реализующий сквозную функциональность. Аспект изменяет поведение
остального кода, применяя совет в точках соединения, определенных некоторым срезом. Иными словами, это
комбинация советов и точек соединения. К примеру, модуль логирования будет вызывать АОП аспект для
логирования.
28.
АОПСовет (Advice) может быть выполнен на разных этапах выполнения точки соединения (joint point):
before - Запускает совет перед выполнением метода.
after - Запускает совет после выполнения метода, независимо от результата его работы (кроме случая
остановки работы JVM).
after-returning - Запускает совет после выполнения метода, только в случае его успешного выполнения.
after-throwing - Запускает совет после выполнения метода, только в случае, когда этот метод “бросает”
исключение.
around - Запускает совет до и после выполнения метода. При этом инпоинты видят только начало и конец
метода. Например, если метод выполняет транзакцию и где-то в середине кода try/catch поймал exception,
транзакция все равно будет свершена, rollback не произойдет. В этом случае нужно пробрасывать ошибку за
пределы метода.
Срез точек (Pointcut) - Срезом называется несколько объединённых точек (join points), в котором должен быть
выполнен совет.
Введение (Introduction) - Это сущность, которая помогает нам добавлять новые атрибуты и/или методы в уже
существующие классы.
Целевой объект (Target object) - Это объект на который направлены один или несколько аспектов.
Плетение (Weaving) - Это процесс связывания аспектов с другими объектами приложения для создания совета.
Может быть вызван во время компиляции, загрузки или выполнения приложения.