МФТИ Core Java 2020 Лекция 13

preview_player
Показать описание
Dependency Injection. Принцип работы DI-контейнера. Принцип работы DI-контейнера (окончание). Spring Framework: Spring DI
Рекомендации по теме
Комментарии
Автор

Есть ли практический смысл от указания bound в аргументе параметризованного метода, если параметризация метода <T> подстраивается при каждом последующем его вызове?
Кажется, что метод public <T> T createObject(Class<? extends T> type) будет идентичен public <T> T createObject(Class<T> type). В Вашем коде отрабатывает аналогично, но думаю я что то упускаю

jolymourner
Автор

0:14 - Проблемы GoF-синлетона
3:21 - Проблемы GoF-синглетона (в пунктах)
4:17 - Фабрика
8:30 - Dependency Injection
10:02 - DI Frameworks
10:37 - Построим свой DI-фреймворк "на коленке"
12:52 - Лектор-робот
13:44 - Задача: Фабрика должна после создания объекта инжектила объекты в переменные.
14:17 - Режим лектора
14:55 - А как "зарядить"?
15:27 - Демонстрация кода.
16:14 - Реализация "магии". Изучение метода createObject.
16:16 - Создание RobotLecturer
19:02 - Создание объекта из конструктора без аргумента.
19:24 - Первый запуск с созданным объектом RobotLecturer.
20:15 - История Евгения Борисова из своей практики.
23:12 - Следующий шаг - сконфигурировать объект.
25:23 - Разбираем что делает метод configure().
28:07 - Усложняем задачу. Inject'им объекты передавая параметры в аннотации.
31:15 - Создаем новый конфигуратор.
33:21 - Однако лучше делать лист конфигураторов.
34:26 - А откуда взялись configurators?
37:56 - Запуск с изменениями, но он еще не говорит. Почему?
39:52 - PostConstruct - стандартная аннотация javax.annotation;
41:18 - Делаем так, чтобы ObjectFactory дергал PostConstruct методы.
42:43 - Последовательность действий - визуализация.
44:01 - Но это еще не вся история.
44:28 - Измеряем насколько быстро говоритель говорит. Аннотация @Benchmark
46:41 - Когда нужно модифицировать действие метода
46:52 - Прокси-объект
47:52 - BenchmarkProxyConfigurator
49:58 - Пробуем отладить программу. Неудачно :(
53:52 - Последовательность действий (окончательная картина)
55:02 - Промежуточные выводы
56:17 - Добро пожаловать, его величество Spring.
59:00 - Переписываем наш пример с "самодельного" фреймворка на Spring
1:00:04 - Изучаем пример со Spring'ом
1:02:14 - Spring Beans
1:03:31 - Способы конфигурации Spring
1:05:37 - Как определять бины
1:07:57 - Classpath scanning
1:09:34 - @Configuration class
1:10:04 - @Configuration class - пример
1:10:54 - @Scope (Bean scope)
1:13:09 - @Lazy
1:15:42 - Bean name
1:16:10 - Виды injection ("впрыскивания")
1:16:36 - Constructor injection
1:18:56 - Setter injection
1:19:51 - Field injection
1:21:55 - Lookup method injection
1:25:08 - Lookup-метод может и не быть абстрактным

statuxia
Автор

Вы вроде бы и в процессе презентации поняли, что вместо переданного type нужно было использовать t.getClass(), поняли, что ломаются лямбды из-за того, что type перестал быть "final", создали новую переменную и осталось только заменить ею type в лямбдах, но в итоге передумали это делать, что вас в итоге остановило? Могу предположить, что работать аннотация могла либо для объекта, у которого в принципе нету интерфейса-родителя, либо который объявлялся не по типу интерфейса, а по типу реализации (т.е. type совпадал с t.getClass()).

_Vertan_