Евгений Борисов - Spring-потрошитель, часть 2

Поделиться
HTML-код
  • Опубликовано: 2 июл 2014
  • Ближайшая конференция - Joker 2024, 9 октября (Online), 15-16 октября, Санкт-Петербург
    - -
    . . . . Евгений Борисов - Spring-потрошитель, часть 2
    Встреча JUG.ru
    Санкт-Петербург, 26.06.2014
    Казалось бы, зачем знать, как работают внутренности спринга для того, чтобы им пользоваться? Работает? Ну и ладно.
    Но как всегда, для эффективной работы с фреймворком, неплохо бы понимать, что находится под капотом. Ведь только понимая его внутреннее устройство, вы сможете пользоваться Спрингом на полную мощность, адаптировать его под нужды вашего проекта, добиться максимальной производительности и решить любую проблему самостоятельно, не обращаясь в Spring-сервис-центр.
    Итак, несколько вопросов про Spring, которые мы рассмотрим в рамках данного доклада (с примерами к каждому):
    Насколько Spring влияет на производительность вашей программы?
    Что входит в жизненный цикл спринга?
    Как устроен ApplicationContext?
    «Вот это на Spring сделать нельзя» - а может можно?
  • НаукаНаука

Комментарии • 73

  • @strash1692
    @strash1692 2 года назад +63

    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)

  • @dmitriyn9462
    @dmitriyn9462 2 года назад +37

    Я только удивлён, у такого грамотного и бесценного материала всего 130к просмотров... В то же время у какого-нибудь мусора миллионы))) Автору огромное спасибо!

    • @airat2010
      @airat2010 Год назад +7

      поэтому основная масса и живет по течению. и получает деньги чтобы не умереть . А это для Java разработчиков - это гордая профессия

    • @protiv_bio
      @protiv_bio 4 месяца назад

      @@airat2010 Java, это Java, на лучшем языке писать имеешь право

  • @user-xq6py9re4c
    @user-xq6py9re4c Год назад +6

    когда 10 минут видео пересматриваешь 10 раз)

  • @Twitteron_
    @Twitteron_ 2 месяца назад +1

    Тёска, спасибо, ты лучший учитель по спрингу!

  • @user-qg3kx2cq7d
    @user-qg3kx2cq7d 6 месяцев назад +3

    Жека, спасибо большое! Смотреть интересно и увлекательно. Дай Бог тебе здоровья)

  • @alexei3366
    @alexei3366 Месяц назад

    На этом приложении понятно , что такое прототайп и что такое сингелтон 🙂 Зачет!

  • @user-if6ro8gp8m
    @user-if6ro8gp8m 6 лет назад +22

    Чертовский интересно, полезно, грамотно, живо. Спасибо за труд!

  • @dimitryrusu4022
    @dimitryrusu4022 Год назад +8

    Мой мозг от этой лекции: Я ЖИДКИЙ

    • @Daniel-mo1iy
      @Daniel-mo1iy 9 месяцев назад

      Да! Я тоже сразу не понимаю, первую лекцию смотрел раза 3)

  • @andrey1983
    @andrey1983 2 года назад

    Спасибо за отличный доклад!

  • @user-vm7re9bu9r
    @user-vm7re9bu9r 2 года назад +1

    очень интересные примеры, которые наводят улыбку и поднимают настроение)

  • @user-ix2cf5ny1q
    @user-ix2cf5ny1q Год назад +1

    Спасибо большое эту потрясающую лекцию. Очень хотелось бы попасть на офлайн конференцию к Евгению!

  • @lexbekker
    @lexbekker Год назад +1

    Легенда

  • @user-ib7vx3yc4i
    @user-ib7vx3yc4i Месяц назад

    просто супер

  • @mrtoot3474
    @mrtoot3474 3 года назад +2

    кстати, Color можно было еще вот так определить
    @Autowired
    private javax.inject.Provider color;
    и потом где нужно
    color.get();

  • @Max-wn2gd
    @Max-wn2gd 2 года назад

    кому-нибудь удалось первый пример с заменой класса воспроизвести ? У Евгения на 9:30 возвращается нужный бин и вызывается метод, а у меня возвращется null

  • @evileye100
    @evileye100 3 года назад +11

    всю лекцию смотрел, не стоит ли у меня ускоренное воспроизведение видео, не стояло...

    • @looklearn4745
      @looklearn4745 3 года назад +1

      Это для меня очень важный фактор оценки, чаще всего приходится ставить скорость на 1.5, потому что спикеры мямлят. Тут не пригодилось, отличная подача

  • @thestory2417
    @thestory2417 11 месяцев назад

    Legenda!

  • @iharbakhanovich
    @iharbakhanovich Год назад

    ссылка на гит есть?

  • @dotnet2012
    @dotnet2012 3 месяца назад +1

    Доклад вышел 26.06.2014, а 04.09.2014 вышел Spring 4.1 где появилась аннотация @Lookup, которая по сути делает то же самое что и Евгений на 43:56

  • @mykytapiskarov7291
    @mykytapiskarov7291 3 года назад +2

    43:00-44:00
    Не понимаю, почему использование proxyMode = target class у бина Color приводит к тому что при получение ColorFrame его зависимость Color будет каждый раз разная
    По логике ColorFrame должен иметь один и тотже цвет, только этот цвет по сути прокси через cglib

    • @mykytapiskarov7291
      @mykytapiskarov7291 3 года назад +2

      Отвечаю на свой коммент, дело в комбинации скопа прототайп и использовании прокси. При вызове любого метода прокси обьекта вначале изпользуя TargetSource получается объект что должен проксироватся. При чем для получения target обьекта используется beanFactory.getBean, что приводит к создании нового обекта, тк скоп бина в данном случае прототайп

    • @Lecomptby
      @Lecomptby 3 года назад

      @@mykytapiskarov7291 как ты узнал?)

    • @mykytapiskarov7291
      @mykytapiskarov7291 3 года назад

      Harv two погулял по соурс коду спринга

  • @romandzhadan5546
    @romandzhadan5546 2 года назад

    top

  • @smormanyak
    @smormanyak 3 года назад +7

    Этому человеку надо книги писать ) Есть что-то подобное почитать?

  • @timon59388
    @timon59388 2 года назад +3

    Приятная атмосфера в аудитории шутят, подсказывают, майки требуют

  • @user-bh9hx3ue7i
    @user-bh9hx3ue7i 5 месяцев назад

    Как он все понимает, научите меня, буду весьма благодарен

    • @m0naco608
      @m0naco608 21 день назад

      Он разработчик со стажем больше 20 лет )

  • @dreamer_vi905
    @dreamer_vi905 Месяц назад

    Прошло 9 лет. Про создание бинов через Groovy так и не слышал.

    • @tusman4ik
      @tusman4ik 5 дней назад

      По факту:) Хз, мне сразу показалось, что это не удобно

  • @UnitedFeodor
    @UnitedFeodor Год назад

    45

  • @nickb.9677
    @nickb.9677 3 года назад

    Benchmark, кстати, отнюдь не восьмилетний =) Цифра 8 на этикетке к возрасту никакого отношения не имеет.

  • @burningass5516
    @burningass5516 2 года назад +1

    Я, конечно, всё понимаю, но откуда у студента деньги на 8-летний виски?

  • @melukandrew
    @melukandrew 3 года назад

    не вижу ничего плохого, что бы автовайрить контекст в синглтон и из него получать Бин. Да больше связность, но больше контроля, более предсказуемо и очевидно будет работать, в продакшене только такое и встречал. Смущает, что если вызвать по ошибке гетколор 2 раза в одном методе, то будет 2 разных инстенса, это не очевидно в месте вызова, потом можно долго искать причину баги.

  • @watchyourstepskid
    @watchyourstepskid 3 года назад +8

    Сколько людей без масок, ужас

    • @whoamiukr
      @whoamiukr 2 года назад +3

      чудом выжили!

  • @VadimMikhnevych
    @VadimMikhnevych 9 лет назад +19

    Отличный метод раздачи футболок! :)

  • @zugzug90
    @zugzug90 6 лет назад +12

    ОГНЕННОЕ ВИДЕО! Жека - терминатор!

  • @igore4ek1988
    @igore4ek1988 8 лет назад +81

    "Какая разница между Spring, String и Swing?" )))

    • @aslankussein3237
      @aslankussein3237 7 лет назад +24

      во второй букве

    • @ip4989
      @ip4989 3 года назад +12

      Swing это когда парами меняются

    • @randomaccess4402
      @randomaccess4402 3 года назад

      @@ip4989 нет, это графическая либа в джаве

    • @ip4989
      @ip4989 3 года назад +8

      @@randomaccess4402 если я смотрю видео по спрингу, каков шанс, что я не знаю что такое свинг?)

    • @NeptuneCasto
      @NeptuneCasto 3 года назад +7

      @@ip4989 Зависит от того в какой год отправили терминатора)

  • @alexanderyurlov8319
    @alexanderyurlov8319 8 лет назад +6

    Интересно слушать, хорошая подача!
    А есть код программы? посмотреть бы повнимательнее.

  • @andrei4145
    @andrei4145 8 лет назад

    Эпично

  • @ruslansitdikov1489
    @ruslansitdikov1489 4 года назад

    А когда пропертя загружаются? И можно ли их заюзать в postProcessBeanFactory?

  • @user-sy4wu9er5v
    @user-sy4wu9er5v 7 лет назад

    50-60 минуты, где создается Scope "periodical", я воспроизвела этот пример, долго смотрела на работающую программу и обнаружила, что через 20-30 секунд Screensaver перестает менять цвет. Время смены цвета в коде я указала 2 секунды.
    Кто также воспроизводил код, понаблюдайте подольше за работающей программой, возникнет ли у вас такое же странное поведение?

    • @GoodGuyFinishFirst
      @GoodGuyFinishFirst 7 лет назад +10

      Думаю проблема в том что метод getSecond() возвращает секунды в минуте, и когда now() доходит до конца минуты то секунды сбрасываются в ноль, и разность now().getSecond() - someTime.getSecond() уходит в отрицательные значения а значит меньше 3. Надо пользоваться duration-ами. Как написал Igor Salnikov выше.

    • @user-sy4wu9er5v
      @user-sy4wu9er5v 6 лет назад

      Вот спасибо!

    • @NiyamaFoxy
      @NiyamaFoxy Год назад +1

      Всё ещё актуально?

    • @grigorym3125
      @grigorym3125 10 месяцев назад +1

      Проблема в том, что метод getSecond() возвращает кол-во секунд от начала минуты (то есть значение от 0 до 60), соответственно смена цвета будет не каждые три секунды, а как повезет (например если первый вызов был в 10:20 а следующий в 11:10, то цвет не сменится)

  • @inbuckswetrust7357
    @inbuckswetrust7357 4 года назад +2

    java когда чтобы отнять два времени нужно гуглить ;)

  • @MrMaksimsergeevich
    @MrMaksimsergeevich 5 лет назад

    Кто в итоге ящик пива выиграл? Барух или Жека?

  • @oleksandrdyachuk3951
    @oleksandrdyachuk3951 6 лет назад +19

    Я хочу от него ребенка!)))

    • @Ivan54r
      @Ivan54r 5 лет назад +35

      для это нужно переписать beanpostprocessor