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к просмотров... В то же время у какого-нибудь мусора миллионы))) Автору огромное спасибо!
43:00-44:00 Не понимаю, почему использование proxyMode = target class у бина Color приводит к тому что при получение ColorFrame его зависимость Color будет каждый раз разная По логике ColorFrame должен иметь один и тотже цвет, только этот цвет по сути прокси через cglib
Отвечаю на свой коммент, дело в комбинации скопа прототайп и использовании прокси. При вызове любого метода прокси обьекта вначале изпользуя TargetSource получается объект что должен проксироватся. При чем для получения target обьекта используется beanFactory.getBean, что приводит к создании нового обекта, тк скоп бина в данном случае прототайп
кому-нибудь удалось первый пример с заменой класса воспроизвести ? У Евгения на 9:30 возвращается нужный бин и вызывается метод, а у меня возвращется null
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, то цвет не сменится)
не вижу ничего плохого, что бы автовайрить контекст в синглтон и из него получать Бин. Да больше связность, но больше контроля, более предсказуемо и очевидно будет работать, в продакшене только такое и встречал. Смущает, что если вызвать по ошибке гетколор 2 раза в одном методе, то будет 2 разных инстенса, это не очевидно в месте вызова, потом можно долго искать причину баги.
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)
Жека, спасибо большое! Смотреть интересно и увлекательно. Дай Бог тебе здоровья)
когда 10 минут видео пересматриваешь 10 раз)
Чертовский интересно, полезно, грамотно, живо. Спасибо за труд!
Я только удивлён, у такого грамотного и бесценного материала всего 130к просмотров... В то же время у какого-нибудь мусора миллионы))) Автору огромное спасибо!
поэтому основная масса и живет по течению. и получает деньги чтобы не умереть . А это для Java разработчиков - это гордая профессия
@@airat2010 Java, это Java, на лучшем языке писать имеешь право
подскажи пожалуйста есть на гите это?
Один из любимых докладов, прям вот кайфую от просмотра
ОГНЕННОЕ ВИДЕО! Жека - терминатор!
Доклад вышел 26.06.2014, а 04.09.2014 вышел Spring 4.1 где появилась аннотация @Lookup, которая по сути делает то же самое что и Евгений на 43:56
На этом приложении понятно , что такое прототайп и что такое сингелтон 🙂 Зачет!
Тёзка, спасибо, ты лучший учитель по спрингу!
тёзка, учите русский
@@вапвапвапвапва-ж1и душнила ты
Отличный метод раздачи футболок! :)
очень интересные примеры, которые наводят улыбку и поднимают настроение)
Спасибо большое эту потрясающую лекцию. Очень хотелось бы попасть на офлайн конференцию к Евгению!
Легенда
Спасибо за отличный доклад!
"Какая разница между Spring, String и Swing?" )))
во второй букве
Swing это когда парами меняются
@@ip4989 нет, это графическая либа в джаве
@@randomaccess4402 если я смотрю видео по спрингу, каков шанс, что я не знаю что такое свинг?)
@@ip4989 Зависит от того в какой год отправили терминатора)
Прошло 9 лет. Про создание бинов через Groovy так и не слышал.
По факту:) Хз, мне сразу показалось, что это не удобно
кстати, Color можно было еще вот так определить
@Autowired
private javax.inject.Provider color;
и потом где нужно
color.get();
просто супер
43:00-44:00
Не понимаю, почему использование proxyMode = target class у бина Color приводит к тому что при получение ColorFrame его зависимость Color будет каждый раз разная
По логике ColorFrame должен иметь один и тотже цвет, только этот цвет по сути прокси через cglib
Отвечаю на свой коммент, дело в комбинации скопа прототайп и использовании прокси. При вызове любого метода прокси обьекта вначале изпользуя TargetSource получается объект что должен проксироватся. При чем для получения target обьекта используется beanFactory.getBean, что приводит к создании нового обекта, тк скоп бина в данном случае прототайп
@@mykytapiskarov7291 как ты узнал?)
Harv two погулял по соурс коду спринга
Мой мозг от этой лекции: Я ЖИДКИЙ
Да! Я тоже сразу не понимаю, первую лекцию смотрел раза 3)
всю лекцию смотрел, не стоит ли у меня ускоренное воспроизведение видео, не стояло...
Это для меня очень важный фактор оценки, чаще всего приходится ставить скорость на 1.5, потому что спикеры мямлят. Тут не пригодилось, отличная подача
Интересно слушать, хорошая подача!
А есть код программы? посмотреть бы повнимательнее.
кому-нибудь удалось первый пример с заменой класса воспроизвести ? У Евгения на 9:30 возвращается нужный бин и вызывается метод, а у меня возвращется null
Legenda!
А когда пропертя загружаются? И можно ли их заюзать в 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, то цвет не сменится)
ссылка на гит есть?
Этому человеку надо книги писать ) Есть что-то подобное почитать?
Эпично
top
java когда чтобы отнять два времени нужно гуглить ;)
Приятная атмосфера в аудитории шутят, подсказывают, майки требуют
Как он все понимает, научите меня, буду весьма благодарен
Он разработчик со стажем больше 20 лет )
Я хочу от него ребенка!)))
для это нужно переписать beanpostprocessor
Кто в итоге ящик пива выиграл? Барух или Жека?
Benchmark, кстати, отнюдь не восьмилетний =) Цифра 8 на этикетке к возрасту никакого отношения не имеет.
45
не вижу ничего плохого, что бы автовайрить контекст в синглтон и из него получать Бин. Да больше связность, но больше контроля, более предсказуемо и очевидно будет работать, в продакшене только такое и встречал. Смущает, что если вызвать по ошибке гетколор 2 раза в одном методе, то будет 2 разных инстенса, это не очевидно в месте вызова, потом можно долго искать причину баги.
Сколько людей без масок, ужас
чудом выжили!
Я, конечно, всё понимаю, но откуда у студента деньги на 8-летний виски?
Уже 10 летний)