Евгений Борисов - Spring-потрошитель, часть 1
Ғылым және технология
Ближайшая конференция - Joker 2024, 9 октября (Online), 15-16 октября, Санкт-Петербург
- -
. . . Евгений Борисов - Spring-потрошитель, часть 1
Встреча JUG.ru
Санкт-Петербург, 26.06.2014
Казалось бы, зачем знать, как работают внутренности спринга для того, чтобы им пользоваться? Работает? Ну и ладно.
Но как всегда, для эффективной работы с фреймворком, неплохо бы понимать, что находится под капотом. Ведь только понимая его внутреннее устройство, вы сможете пользоваться Спрингом на полную мощность, адаптировать его под нужды вашего проекта, добиться максимальной производительности и решить любую проблему самостоятельно, не обращаясь в Spring-сервис-центр.
Итак, несколько вопросов про Spring, которые мы рассмотрим в рамках данного доклада (с примерами к каждому):
Насколько Spring влияет на производительность вашей программы?
Что входит в жизненный цикл спринга?
Как устроен ApplicationContext?
«Вот это на Spring сделать нельзя» - а может можно?
Пікірлер: 200
8 лет прошло, а до сих пор актуальный и информативный доклад.
@user-nv9dr7nt3d
Жыл бұрын
Я бы даже сказал, 8 лет прошло, а более качественного материала на эту тему я на просторах сети не нашел
@Daniel-mo1iy
11 ай бұрын
@@user-nv9dr7nt3d как новичок сейчас смотрю, пока мало что понятно. но, думаю, дело времени.
@user-nv9dr7nt3d
11 ай бұрын
@@Daniel-mo1iy сюда стоит заходит когда уже прошел какой-то приличный курс по спрингу, тогда прям будет хорошо
@serged5689
11 ай бұрын
8 лет прошло, а у нас эти фишки только начали использовать на проекте под маркой "а вот оказывается как ещё можно делать в спринге".
@mark_tatyschev
7 ай бұрын
продлеваем: 9 лет прошло, а до сих пор актуальный и информативный доклад.
30 лет прошло, а доклад все еще актуальный.
Смотрю 5й раз, с каждым разом понимаю чуть больше)
@theAntoshka
2 жыл бұрын
это как библию читать))
познавательно и доходчиво, 10 постбинпроцессоров из 10
@ishunin97
6 жыл бұрын
ведьмак от мира фреймворков
@al1as643
4 жыл бұрын
Бинпостпроцессоров =))
@dspursuer
Жыл бұрын
скорее 5/5, по количеству выводимых рандомом сообщений
За время разработки цитатника в этом видео, я выделил топ цитат от Евгения: 1) try-catch всегда некрасиво, и плохо сказывается на нервной системе 2) -Вы используете тесты? -Да, мы пишем тесты -А как вы пишите тесты? -Ну как? - main создаем, прямо в том же классе, который надо протестировать - очень удобно. Прям там создаем объект из этого класса, запускаем, смотрим - если 17 - то нормально 3) Лучше знать, что есть проблема (null), чем жить с каким-то нулем 4) Знаете почему важно не делать грамотические ошибки? - стыдно перед заграничными партнерами 5) ...сatch пустой не буду оставлять - грех
Плотность информации на одну минуту видео просто зашкаливает. Всё по делу без воды. Каждое предложение - очень ценная информация. Если по этим двум частям сделать книгу, то выйдет мануал страниц на 300, не меньше.
Лучшие лекции по spring даже несмотря на дату публикации.
Все советуют это видео новичкам в Спринге, так вот не слушайте их. Лекция явно для тех, кто уже в теме, так что если вы ничего не поняли - то нормально. Лично я вернулся к этой лекции спустя полгода работы на Спринге
@user-cc2hq4jl4m
2 жыл бұрын
вернулся спустя 3 года) полностью согласен, гораздо полезнее тем кто уже в теме
@spirridd
2 жыл бұрын
Необязательно. Я смотрел эту лекцию до того, как написал первые строчки на спринге.
@NickRuster
2 жыл бұрын
@@spirridd я смотрю и нихрена не понимаю
@dimchik-kenshi
2 жыл бұрын
Посоветуете что-то новичкам?)
@user-fj5dx1gf8u
Жыл бұрын
@@dimchik-kenshi думаю вам уже неактуально, но может кому-то из прочитавших позже будет полезно У Алишева есть курс по Спрингу, часть которого лежит на ютубе в открытом доступе Канал alishev, там в целом много полезного по Java
Волшебная лекция) Спасибо)))
Если поставить скорость видео на х0.5, то можно услышать как говорит Евгений после употребления Бенчмарка или Синглтона
Евгений, спасибо. Очень доступно.
Отличное видео, понятным языком) Спасибо
шикарное видео, раз в годик пересматриваю с удовольствием)
Спасибо большое за лекцию! И отдельное спасибо за чёткую наложенную картинку с кодом!
Просто огонь! Спасибо.
Сначала проходил Spring сам, потом делал тестовые на Spring Boot, сейчас имея небольшой опыт смотрю его лекции на стажировке. Евгений очень круто и без воды объясняет, доходчиво и понятно. Как лектор он крутой
Шикарно!
Да, человек умеет рассказывать. Спасибо большое.)
Большое спасибо!
До сих пор лучшее видео о спринге на ютубе
ребята, это база! уважение Евгению
Один из лучших роликов по теме
Как хорошо что есть в записи! Был бы на докладе в живую, уловил бы процентов 30 только..
это оч круто, первый раз досмотрел до конца и даже что-то понял :)
это сильно, браво
Спасибо
Лучший спикер по Java!)
46:23 - двадцать шестое июня, четверг, воcемь вечера. Несмотря на то, что все устали от коммитов в проект, ребята нашли в себе силы прийти ещё на доклад Борисова и поразвиваться.
Лекция крайне плотная и информативная. Но после неё всё равно остаётся куча внутренностей, которые еще надо "потрошить", изучать)) Например, про то, как работает сканер бинов в современной версии спринга. И каким именно образом работает класс, подменяемый dynamic proxy. Хотя, когда-то я еще писал свой кривой BeanDefinitionReader и BeanFactory, так что у меня всё таки вопросов по внутренностям чуть меньше)) Погружаться в это можно очень долго. Но это интересно!
считаю что работы Евгения должны спрашивать в универе и на собеседованиях на ровне с другими предметами
Смотрю в 2021 и мне прямо очень заходит, могут же
А где можно найти презентацию доклада?
top
прям с трудом верится, что видео перед выкладыванием не было ускорено. неужели можно так быстро мыслить, говорить и жестикулировать?) однако при просмотре на скорости 0,75 понимаешь, ... не мог человек в таком состоянии прийти на свое выступление)))
@pshavykin
3 жыл бұрын
))))
@klaussr
3 жыл бұрын
Люди все разные, энергичный просто человек, увлеченный
@tonyvladi9940
11 ай бұрын
Он просто это уже не первый десяток раз рассказывает, это я как экскурсионный гид говорю. Всё уже на автомате...
39:32. А если метод ничего не возвращает?
палец вверх от СЕООНЛИ!!!!!!!!
Как он делает эту магию при написании кода? пишет r и у него появляется целая строка, где он создает экземпляр класса Random. Потом в другом месте нажимает по всей видимости ctrl+alt+L и у него сами проставляются точка с запятой в конце строки, кто знает как это настроить?)
Жесть конечно как тяжко всё это воспринимать человеку недавно зашедшему в спринг, по 20 раз пересматриваю каждый момент, чтобы понять что он там пытался осветить.
если бы я так защищал свой диплом, мне бы поставили шестерку и вручили приз зрительских симпатий
"Чиню баг, которого нет, а у него всё равно баг" жиза
Подскажите стоит смотреть с этого если спринг не изучал до этого
@______________9358
7 ай бұрын
думаю нет,потому что ни хрена не поймешь. я прошел курс Алишева , написал маленький проект и даже после этого когда смотрел ничего не понял. раза 10 пересмотрел и вроде на 80% понял
@java_couch
4 ай бұрын
это можно понять только спустя годы работы, я начал это понимать где после 5 лет на спринге, до этого все это было просто как пустой звук
По поводу того, что спринг выбирает механизм проксирования CGlib или DynamicProxy,... он всегда использует Cglib, всегда
@user-rl8fy6xe1t
8 ай бұрын
Доку быть хоть почитал, как он создаст Gglib, если мой бин не наследуется ни от одного интерфейса?
@user-rl8fy6xe1t
8 ай бұрын
If the target object to be proxied implements at least one interface then a JDK dynamic proxy will be used. All of the interfaces implemented by the target type will be proxied. If the target object does not implement any interfaces then a CGLIB proxy will be created.
@java_couch
4 ай бұрын
хуйню не пиши, dynamic используется если класс имплементирует интерфейс, если нет будет cgLib
норм) обычный жизненный цикл бина... по поводу eventLiteners конечно накручено я думаю это было просто сказано в образовательных целях сомневаюсь чтобы вот так извращались в рядовых проектах обычно все заканчивается на postProcessAfterInitialization
Классный урок. Но оператора я бы выгнал. Показывать лектора крупным планом без доски большую часть времени, это супер. Наверное оператор считает, что в размахивании руками информации больше, чем в примерах на доске.
Так и не понял как он "решил" проблему с Lazy в самом конце.
11:37
26:24 - "то ему придётся делать очень сложную работу..... " - Евшений Борисов, Вам удаётся совмещать стендап комеди, с обучением программированию, и программированием людей на выполнение очень сложной работы. Х))
А МОЖНО Оборватьь
Вот бы скорость 0,9
айбернет😂👍👍👍👍
@______________9358
7 ай бұрын
правильно будет hайбернет. букву h в русском алфавите не хватает.
28:16 - Евгений Борисов, небольшая поправка -Первый подход - это циглиб (когда класс не имеет интерфейса или класс файнал(с ваших слов)), а второй это динамик прокси. Вы просто 5ю секундами ранее говориле сначала о наследовании от классов, а потом как второй вариант от интерфейсов, и следом вы НАЗЫВАЕТЕ эти подходы как Динамик прокси и "вторым" Вы называетее циглиб.
Не знал что Гарик в Спринге шарит.
мужик говорит в x2
че
ты бесиш
Для меня недоходчиво было от слова совсем, автор изъясняется на эльфийском, нужно смотреть каждое второе слово в словаре. Терминологии, которую объяснил вначале, раз-два и обчёлся.
Шкода, що па рускі
@Daniel-mo1iy
Жыл бұрын
Можно включить субтитры
@Bogdan666gabov
24 күн бұрын
Тем не менее ты его знаешь и понимаешь, в чем проблема?
@musicvoice3030
24 күн бұрын
@@Bogdan666gabov погано сприймається
спринг - говно
Помогите! в конце этого видел, где Борисов пишет "3ю-фазу конструктора", на вот этом моменте @Autowired ConfigurableListableBeanFactory factory; ... у меня почему-то вместо в фабрики инжектится null Говорят, это частая ошибка а, если компонент незареган в Контексте, но кого нам регистрировать, Фабрику Спринга что ли??) В общем я уже все до буквы за Борисовым переписал, стэковерфлоу твердит про причины см.выше, которые по идее не имеют отношения к нашей ситуации. . .
Этот доклад прям на цитаты можно разбирать: "Лучше получить эксепшн, чем жить с каким-то нулем", "Не буду catch блок пустым оставлять - грех".
@programming7777
3 жыл бұрын
"трай и кетч всегда некрасиво и плохо сказывается на нервной системе" :)
@hramovalexey
2 жыл бұрын
Еще это: "Если у внутреннего компонента спринга класс меньше двадцати букв, то это просто несерьезно" ))
@9Ipowa
2 жыл бұрын
@@hramovalexey Либо как в части про профилирование: "Если стоит - то ему придется делать сложную работу"
@toshgun23
2 жыл бұрын
"А кто здесь не грешил? ))"
Огромное спасибо за такое видео. Чел просто супер объясняет. Побольше бы именно такого плана видео.
@azamatk4302
3 жыл бұрын
Если у программистов есть хороший тон и правила чистого кода, то у ведущего (в данном случае докладчика) не должны быть "айбернейты" , "собаки", также эмм ымм бээем. При всем уважении.
@BiteMyBrain
3 жыл бұрын
@@azamatk4302 так вам шашечки или ехать? :)
@azamatk4302
3 жыл бұрын
@@BiteMyBrain Посмотрел далее ... Доклад отличный! По вашей аналогии, примерно как сесть в такси бомбилы из Кавказа :) Водитель с акцентом, но душевно что-то рассказывает =)
08:30 BeanPostProcessor 25:15 Профайлер, JMX 49:00 ApplicationListener Спасибо!
Офигительный доклад, спасибо!
Gut gemachen, Evgeny!
Спасибо вам огромное. Один из самых приятных докладов. Евгений отлично рассказывает, все очень последовательно и по делу.
Доклад очень хороший . Только недавно начал работать со Спрингом . после доклада стало намного понятнее как он работает . Супер !
Легендарный доклад
Кто эти люди, которые поставили дизлайк!!?? Доклад на высоте, спасибо.
Лекция супер. Если кому интересно, то рандом так игрался из-за того, что в метод передаем не разницу, а сумму (смещаем отрезок)
Один из лучших технических докладов на русском языке
@ValentineGoloubev
6 жыл бұрын
на иврите же :)
Пока смотрела все было понятно. На следующий день хотела повторить- вообще ниче не помню! А вообще, доклад- супер. Если эта инфа и есть в оф доках, отфильтровать ее самостоятельно было бы очень не просто
@user-ns9yz4dw6j
5 жыл бұрын
+
+1 за Therion
Евгений крайне интересно вещает, запись смотрится на одном дыхании, но всё время меня не покидала мысль, что поведением похож на Александра Якушева("Курск" КВН)
@twinklegroup8741
3 жыл бұрын
а я смотрю и думаю, кого же он мне напоминает
можно и заимплементить интерфейс BeanFactoryPostProcessor и доставать через рефлексию нужны поля, разница только в том, что BeanPostProcessor работатет уже с проиниализироваными полями обьекта, а BeanFactoryPostProcessor - после загрузки бинов в контейенер dzone.com/articles/spring-bean-lifecycle
Не пропущена ли часть видео где Евгений с пакетом qualifiers играется?
Где посмотреться второй часть?
еще ПрОфиль и профИль.))) Лекция супер.
Лекция отличная, но раньше я думал что говорят "поднимусь повыше" скроля вниз только люди 60+
на 0,75 нормально смотреть
@Tleu13
4 жыл бұрын
Смотрю на 2.0
@Boyarsskiy
4 жыл бұрын
))))) и голос, как-будто 0,75 хряпнул
@klaussr
3 жыл бұрын
Тоже сначала увеличивал, потом вернул обычную
@maxgrind28
2 жыл бұрын
Да, редкий пример, когда человек не нудит и все говорит по делу. Очень хороший докладчик. Смотрел на 1 с частыми перемотками назад.
59:00 если бин создан через метод в @Configuration то getBeanClassName вернет null же?
@isey2851
6 жыл бұрын
Если речь идёт про метод, аннотированный @Bean и подобные, то насколько я знаю, спринг генерирует имя бина по имени метода.
@kirillleonov7405
5 жыл бұрын
вы не нашли ответ почему так происходит?
@s1mpleman782
4 жыл бұрын
Думаю что getBeanClassName и здесь нормально отработает, т.к. в BeanDefinition название класса бина возьмется как имя название возвращаемого объекта
А как происходит консолидация (объединение) результатов работы методов postProcessAfterInitialization разных BeanPostProcessor'ов? Ну то есть...Пусть есть 10 моих кастомных аннотаций, которые меняют логику бина, добавляя к его методам 10 соответствующих функционалов. Делаем 10 BeanPostProcessor'ов (далее BPP). Это нужно делать на стадии AfterInitialization и возвращать в методе postProcessAfterInitialization прокси с добавленным функционалом. В каком порядке сработают мои 10 BPP? Что после отработки всех 10 BPP будет в контейнере: один прокси объект (объединяет в себе все функционалы) или 10 разных прокси оберток над оригиналом? Ну то есть в итоге же я должен получить bean, к оригинальной реализации которого накручено 10 функционалов. Как это получается? Это многослойная прокси обёртка получаетя?
@s1mpleman782
4 жыл бұрын
Думаю первый раз создастся прокси над оригинальным классом, а потом будут создавать прокси на предыдущим прокси и так 9 раз. И результирующий прокси будет выполнять весь функционал. В каком порядке будут вызываться BPP это не должно быть важно. Если это важно, т.е. Вам нужно чтобы логика одного BPP срабатывала прежде другого BPP, то тогда нужно пересмотреть эту логику и возvожно объединить в один BPP.
У enabled флага volatile не нужен?
@niyazkadirov8593
3 жыл бұрын
Здесь не многопоточность
21 сишарперов дислайкнули
Сильно не ругайте за вопрос - только начинаю изучать spring. Разве нельзя делать профилирование такого типа через spring AOP?
@user-oo9ee7ln1c
6 жыл бұрын
Можно конечно. Но цель доклада немного глубже конкретной задачи профилирования). AOP ведь тоже работает через proxy, а после доклада складывается впечатление, как оно может быть реализовано.
Дайте линк на картинку, которая в начале лекции. Которая "Спринг в картинках"
@Tim86I
9 жыл бұрын
vk.com/doc4606_318090168
@michaelskidan9719
7 жыл бұрын
Этот документ был удалён из общего доступа.
@bashtaVital
5 жыл бұрын
2014.jpoint.ru/presentations/Borisov_spring.pdf
@user-lo8ij9pw1h
5 жыл бұрын
2014.jpoint.ru/presentations/Borisov_spring.pdf
Что нужно знать, чтобы это видео было полезно? Я знаю только Java Core и SQL. Будет какой-то толк? Или посоветуете что-то прочитать?
@igorvasylevskyi3629
4 жыл бұрын
Ето точно не для новичков, ето для тех, кто уже нормально ознакомлен со Spring
@maxkatrenko8865
4 жыл бұрын
Igor Vasylevskyi ну вот и я так думаю, а много людей мне советуют эти видео, когда я у них спрашиваю о инфе про спринг
@AndreiPushkou
2 жыл бұрын
@@igorvasylevskyi3629 По мне, так новичку надо смотреть минимум два раза - сразу и после того как поковыряешься в спринге. Первый просмотр просто много чего в голову откладывает, а второй - уже рассортировывает.
чет у меня нет там такого плагина в списке
Кидает налл поинтер. В поле BeanDefinition beanDefinition = factory.getBeanDefinition(name); factory = null В чем проблема?
@saulgoodman9657
7 жыл бұрын
В мене був NPE через те що я в методі postProcessAfterInitialization(Object bean, String beanName) забув змінити return null на return bean. Можливо вам допоможе)
@michaelskidan9719
7 жыл бұрын
+Roman Chmeluk В общем-то упущение в дизайне фреймворка, что он не хэндлит такое. Тем более что IDE при генерации метода по умолчанию вставляют "return null;", и это всем известно.
@user-wd8sc4ix2m
7 жыл бұрын
не забыл ?
@shandi1241
7 жыл бұрын
или AutowiredAnnotationBeanPostProcessor для лучшего усвоения материала )
@kirillleonov7405
5 жыл бұрын
вы не нашли ответ почему так происходит?
Не совсем то докладчик называет namespace-ами.
актуально в 2019?
@igorvasylevskyi3629
4 жыл бұрын
не очень, хотя старьіх проектов с xml есть много еще
@igorvasylevskyi3629
4 жыл бұрын
kzread.info/dash/bejne/oHuax7WoZZXFaKQ.html с 2:10
@manOfPlanetEarth
3 жыл бұрын
Igor Vasylevskyi 👍🏼👍🏼👍🏼👍🏼
@spirridd
3 жыл бұрын
Всегда актуально, технология же не меняется.
Спринг изучаю не так давно, и все время меня коробило чувство, что за меня кучу работы делает Господь Бог. С одной стороны хорошо, но с другой - я не мог точно знать, как он это делает, а непонимание процесса до конца вызывало дискомфорт. Это все равно что играть в игру не до конца понимая её правила. С этим видео хоть что-то проясняется. Ещё заметил, что многие вещи в Спринге становятся более понятными, когда ты до этого велосипедил их вручную.
@Boyarsskiy
6 жыл бұрын
Michael Morrison Ели брать только Java SE, то тут не соглашусь, тут чистый кодинг, а вот EE и Spring , то есть где в дело вступают контейнеры, то там поначалу очень много временем уходит на понимание работы этих контейнеров, так как львиную долю работы выполняют именно они. Есть конторы, которые сводят к минимуму использование фреймворков, и пишут свои библиотеки, чтобы иметь более полный контроль над кодовой базой.
@Boyarsskiy
6 жыл бұрын
Michael Morrison Я спринг читаю в метро по дороге на работу для общего развития, прямо сплошняком по reference. Хоть и не пользуюсь, а кругозор расширяет ))
@user-gk4py1dy5j
6 жыл бұрын
бля, теперь и я тут
@manOfPlanetEarth
3 жыл бұрын
ска теперь и я в вашем ебучем спринговом болоте🤦♂️
Мёд для ушей.
@ValentineGoloubev
6 жыл бұрын
сахар для кода
@user-gu4cs2hu9f
5 жыл бұрын
творог для костей
@DrAkyla1123
5 жыл бұрын
Синхронизация для потоков
@Narryel
5 жыл бұрын
Москва для москвичей
@WatsOneFTumane
5 жыл бұрын
Скайрим для нордов
На Харламова чем-то похож.
Interesting; however, despite the fact, that I understand Russian well, you're talking way too fast, man.
@Nirion_paladin
4 жыл бұрын
payback speed = 0,5; subtitles enable?)
Молодцы ребята,очень интересный ролик. Кто хочет почитать или просто угареть от еще одной теории о том что на земле лесов нет: www.as-gard.com/30-metrovye-kusty
Мда спринг очень гибок, даже слишком гибок, я лично предпочитаю больше EJB3.2 и очень стандартизированную архитектуру, блин зачем Оракл отдал JEE в Eclipse, ведь так всё было хорошо и стабильно, теперь клиенты всех хотят Спринг, теперь стринг надо всем джавистам учить.
@danyils8728
6 жыл бұрын
че серьезно?) реально возникла проблема с тем что кастомеры говорят "не хотим ЖЕЕ"?)
@tr233
6 жыл бұрын
Ну да иначе я бы этом здесь не писал
Я 10 лет работаю с явой, примерно лет 7 назад удалил spring из все проектов и слава богу. Перешел на Guice. Но на самом деле и Guice особо не нужен. Написал свой маленький Injector. Чем меньше чужого кода в твоих проектах, тем лучше. (Hibernate кстати тоже снес)
@dante86521
7 жыл бұрын
и как работаете з базой данных?
@smalex
7 жыл бұрын
У современных баз данных mongodb, redis, google datastore, cassandra есть своей api, плюс я использую свои утилиты или можно библиотеки написанные другими людьми. В крайнем случае можно jdbc напрямую, через опять же свои обертки. Скорость, простота и предсказуемость решения важнее, чем мнимое удобство hibernate.
@glebdanichev9956
6 жыл бұрын
Smychagin Alexei вы один над своим проектом работаете, или остальные разработчики выучили ваш инжектор? а как же spring data, mvc, batch...
@wayfarer2178
6 жыл бұрын
миллионы девов юзают спринг, а тут я один на белой лошади. А заказчик знает, что он оплачивает создание велосипедов за его деньги?
@Jeff.Wilson
6 жыл бұрын
Предсказуемость реализации и собственный велосипед когда уже есть масса стандартных - это взаимоисключающие параграфы.