0:00 - BeanFactoryPostProcessor
2:58 - @DeprecatedClass через BeanFactoryPostProcessor
10:43 - способ через аннотации @Component
12:24 - ClassPathBeanDefifnitionScanner
13:08 - способ через Java Config
16:27 - метод @Bean это не метод Java, это определение бина, просто имеет формат метода Java
16:47 - ConfigurationClassPostProcessor - особый BeanFactoryPostProccesor (! не bpp, а именно bFpp !)
17:45 - Groovy Config
19:54 - Пишем свой контекст
23:36 - Пишем свой контекст: context.properies
24:53 - Пишем свой контекст: PropertyFileApplicationContext
30:00 - Обновление Prototype в Singleton
38:06 - Обновление Prototype в Singleton: Prototype - Prototype
40:58 - Обновление Prototype в Singleton: Решение 1 (не правильное, через инжект ApplicationContext)
42:50 - Обновление Prototype в Singleton: Решение 2 (решение 50/50, через proxyMode = ...TARGET_CLASS, т.к. другая крайность - при любом обращении к полю - новый бин)
43:50 - Обновление Prototype в Singleton: Решение 3 (через фабричный метод и абстрактный класс)
46:53 - Написание кастомного Scope
59:16 - Benchmarks
(Правильный бенчмарк - использовать сторонние инструменты, а не "изобретать велосипед", иначе ложный результат.)
1:04:27 - Benchmarks. Lookup бина. 1:05:06
1:05:13 - Benchmarks. Создание бина. 1:07:34 XML (700) < Annotation (2100) < Java Config (5100)
1:07:40 - Benchmarks. Инжекшн. 1:08:24 Annotation (150) < XML/Groovy (700 - 900) < Java Config (3000)
1:09:57 - Benchmarks. Создание объекта с прокси. 1:10:28 - (3,3) < DP (1800) < CGLib (4000)
1:10:48 - Benchmarks. Инвокация метода через прокси. 1:11:47 - (3,3) < CGLib/DP (10) < Spring Aspect (250)
Я только удивлён, у такого грамотного и бесценного материала всего 130к просмотров... В то же время у какого-нибудь мусора миллионы))) Автору огромное спасибо!
поэтому основная масса и живет по течению. и получает деньги чтобы не умереть . А это для Java разработчиков - это гордая профессия
Тёска, спасибо, ты лучший учитель по спрингу!
Жека, спасибо большое! Смотреть интересно и увлекательно. Дай Бог тебе здоровья)
когда 10 минут видео пересматриваешь 10 раз)
Спасибо за отличный доклад!
очень интересные примеры, которые наводят улыбку и поднимают настроение)
Чертовский интересно, полезно, грамотно, живо. Спасибо за труд!
На этом приложении понятно , что такое прототайп и что такое сингелтон 🙂 Зачет!
Спасибо большое эту потрясающую лекцию. Очень хотелось бы попасть на офлайн конференцию к Евгению!
Легенда
просто супер
всю лекцию смотрел, не стоит ли у меня ускоренное воспроизведение видео, не стояло...
Это для меня очень важный фактор оценки, чаще всего приходится ставить скорость на 1.5, потому что спикеры мямлят. Тут не пригодилось, отличная подача
кстати, Color можно было еще вот так определить
@Autowired
private javax.inject.Provider color;
и потом где нужно
color.get();
Legenda!
top
кому-нибудь удалось первый пример с заменой класса воспроизвести ? У Евгения на 9:30 возвращается нужный бин и вызывается метод, а у меня возвращется null
43:00-44:00
Не понимаю, почему использование proxyMode = target class у бина Color приводит к тому что при получение ColorFrame его зависимость Color будет каждый раз разная
По логике ColorFrame должен иметь один и тотже цвет, только этот цвет по сути прокси через cglib
Отвечаю на свой коммент, дело в комбинации скопа прототайп и использовании прокси. При вызове любого метода прокси обьекта вначале изпользуя TargetSource получается объект что должен проксироватся. При чем для получения target обьекта используется beanFactory.getBean, что приводит к создании нового обекта, тк скоп бина в данном случае прототайп
Доклад вышел 26.06.2014, а 04.09.2014 вышел Spring 4.1 где появилась аннотация @Lookup, которая по сути делает то же самое что и Евгений на 43:56
Этому человеку надо книги писать ) Есть что-то подобное почитать?
ссылка на гит есть?
Приятная атмосфера в аудитории шутят, подсказывают, майки требуют
45
Benchmark, кстати, отнюдь не восьмилетний =) Цифра 8 на этикетке к возрасту никакого отношения не имеет.
Я, конечно, всё понимаю, но откуда у студента деньги на 8-летний виски?
не вижу ничего плохого, что бы автовайрить контекст в синглтон и из него получать Бин. Да больше связность, но больше контроля, более предсказуемо и очевидно будет работать, в продакшене только такое и встречал. Смущает, что если вызвать по ошибке гетколор 2 раза в одном методе, то будет 2 разных инстенса, это не очевидно в месте вызова, потом можно долго искать причину баги.
ОГНЕННОЕ ВИДЕО! Жека - терминатор!
Отличный метод раздачи футболок! :)
"Какая разница между Spring, String и Swing?" )))
@@randomaccess4402 если я смотрю видео по спрингу, каков шанс, что я не знаю что такое свинг?)
Эпично
Интересно слушать, хорошая подача!
А есть код программы? посмотреть бы повнимательнее.
А когда пропертя загружаются? И можно ли их заюзать в postProcessBeanFactory?
50-60 минуты, где создается Scope "periodical", я воспроизвела этот пример, долго смотрела на работающую программу и обнаружила, что через 20-30 секунд Screensaver перестает менять цвет. Время смены цвета в коде я указала 2 секунды.
Кто также воспроизводил код, понаблюдайте подольше за работающей программой, возникнет ли у вас такое же странное поведение?
Думаю проблема в том что метод getSecond() возвращает секунды в минуте, и когда now() доходит до конца минуты то секунды сбрасываются в ноль, и разность now().getSecond() - someTime.getSecond() уходит в отрицательные значения а значит меньше 3. Надо пользоваться duration-ами. Как написал Igor Salnikov выше.
Проблема в том, что метод getSecond() возвращает кол-во секунд от начала минуты (то есть значение от 0 до 60), соответственно смена цвета будет не каждые три секунды, а как повезет (например если первый вызов был в 10:20 а следующий в 11:10, то цвет не сменится)
java когда чтобы отнять два времени нужно гуглить ;)
Кто в итоге ящик пива выиграл? Барух или Жека?
Один из любимых докладов, прям вот кайфую от просмотра