Евгений Борисов - Spring-потрошитель, часть 1
HTML-код
- Опубликовано: 2 июл 2014
- Ближайшая конференция - Joker 2024, 9 октября (Online), 15-16 октября (Санкт-Петербург + трансляция).
Подробности и билеты: jrg.su/Ypf1HW
- -
. . . Евгений Борисов - Spring-потрошитель, часть 1
Встреча JUG.ru
Санкт-Петербург, 26.06.2014
Казалось бы, зачем знать, как работают внутренности спринга для того, чтобы им пользоваться? Работает? Ну и ладно.
Но как всегда, для эффективной работы с фреймворком, неплохо бы понимать, что находится под капотом. Ведь только понимая его внутреннее устройство, вы сможете пользоваться Спрингом на полную мощность, адаптировать его под нужды вашего проекта, добиться максимальной производительности и решить любую проблему самостоятельно, не обращаясь в Spring-сервис-центр.
Итак, несколько вопросов про Spring, которые мы рассмотрим в рамках данного доклада (с примерами к каждому):
Насколько Spring влияет на производительность вашей программы?
Что входит в жизненный цикл спринга?
Как устроен ApplicationContext?
«Вот это на Spring сделать нельзя» - а может можно? - Наука
8 лет прошло, а до сих пор актуальный и информативный доклад.
Я бы даже сказал, 8 лет прошло, а более качественного материала на эту тему я на просторах сети не нашел
@@user-nv9dr7nt3d как новичок сейчас смотрю, пока мало что понятно. но, думаю, дело времени.
@@Daniel-mo1iy сюда стоит заходит когда уже прошел какой-то приличный курс по спрингу, тогда прям будет хорошо
8 лет прошло, а у нас эти фишки только начали использовать на проекте под маркой "а вот оказывается как ещё можно делать в спринге".
продлеваем: 9 лет прошло, а до сих пор актуальный и информативный доклад.
30 лет прошло, а доклад все еще актуальный.
Смотрю 5й раз, с каждым разом понимаю чуть больше)
это как библию читать))
За время разработки цитатника в этом видео, я выделил топ цитат от Евгения:
1) try-catch всегда некрасиво, и плохо сказывается на нервной системе
2)
-Вы используете тесты?
-Да, мы пишем тесты
-А как вы пишите тесты?
-Ну как? - main создаем, прямо в том же классе, который надо протестировать - очень удобно. Прям там создаем объект из этого класса, запускаем, смотрим - если 17 - то нормально
3) Лучше знать, что есть проблема (null), чем жить с каким-то нулем
4) Знаете почему важно не делать грамотические ошибки? - стыдно перед заграничными партнерами
5) ...сatch пустой не буду оставлять - грех
познавательно и доходчиво, 10 постбинпроцессоров из 10
ведьмак от мира фреймворков
Бинпостпроцессоров =))
скорее 5/5, по количеству выводимых рандомом сообщений
Плотность информации на одну минуту видео просто зашкаливает. Всё по делу без воды. Каждое предложение - очень ценная информация. Если по этим двум частям сделать книгу, то выйдет мануал страниц на 300, не меньше.
Лучшие лекции по spring даже несмотря на дату публикации.
Евгений, спасибо. Очень доступно.
Отличное видео, понятным языком) Спасибо
Волшебная лекция) Спасибо)))
Просто огонь! Спасибо.
Спасибо большое за лекцию! И отдельное спасибо за чёткую наложенную картинку с кодом!
Да, человек умеет рассказывать. Спасибо большое.)
шикарное видео, раз в годик пересматриваю с удовольствием)
Один из лучших роликов по теме
Большое спасибо!
это оч круто, первый раз досмотрел до конца и даже что-то понял :)
Все советуют это видео новичкам в Спринге, так вот не слушайте их. Лекция явно для тех, кто уже в теме, так что если вы ничего не поняли - то нормально. Лично я вернулся к этой лекции спустя полгода работы на Спринге
вернулся спустя 3 года)
полностью согласен, гораздо полезнее тем кто уже в теме
Необязательно. Я смотрел эту лекцию до того, как написал первые строчки на спринге.
@@spirridd я смотрю и нихрена не понимаю
Посоветуете что-то новичкам?)
@@dimchik-kenshi думаю вам уже неактуально, но может кому-то из прочитавших позже будет полезно
У Алишева есть курс по Спрингу, часть которого лежит на ютубе в открытом доступе
Канал alishev, там в целом много полезного по Java
ребята, это база! уважение Евгению
Шикарно!
Как хорошо что есть в записи! Был бы на докладе в живую, уловил бы процентов 30 только..
Сначала проходил Spring сам, потом делал тестовые на Spring Boot, сейчас имея небольшой опыт смотрю его лекции на стажировке. Евгений очень круто и без воды объясняет, доходчиво и понятно. Как лектор он крутой
это сильно, браво
Спасибо
Лучший спикер по Java!)
Если поставить скорость видео на х0.5, то можно услышать как говорит Евгений после употребления Бенчмарка или Синглтона
Лекция крайне плотная и информативная. Но после неё всё равно остаётся куча внутренностей, которые еще надо "потрошить", изучать)) Например, про то, как работает сканер бинов в современной версии спринга. И каким именно образом работает класс, подменяемый dynamic proxy. Хотя, когда-то я еще писал свой кривой BeanDefinitionReader и BeanFactory, так что у меня всё таки вопросов по внутренностям чуть меньше)) Погружаться в это можно очень долго. Но это интересно!
шедевр искусства
Смотрю в 2021 и мне прямо очень заходит, могут же
До сих пор лучшее видео о спринге на ютубе
46:23 - двадцать шестое июня, четверг, воcемь вечера. Несмотря на то, что все устали от коммитов в проект, ребята нашли в себе силы прийти ещё на доклад Борисова и поразвиваться.
считаю что работы Евгения должны спрашивать в универе и на собеседованиях на ровне с другими предметами
А где можно найти презентацию доклада?
"Чиню баг, которого нет, а у него всё равно баг" жиза
39:32. А если метод ничего не возвращает?
top
прям с трудом верится, что видео перед выкладыванием не было ускорено. неужели можно так быстро мыслить, говорить и жестикулировать?)
однако при просмотре на скорости 0,75 понимаешь, ... не мог человек в таком состоянии прийти на свое выступление)))
))))
Люди все разные, энергичный просто человек, увлеченный
Он просто это уже не первый десяток раз рассказывает, это я как экскурсионный гид говорю. Всё уже на автомате...
если бы я так защищал свой диплом, мне бы поставили шестерку и вручили приз зрительских симпатий
Как он делает эту магию при написании кода? пишет r и у него появляется целая строка, где он создает экземпляр класса Random. Потом в другом месте нажимает по всей видимости ctrl+alt+L и у него сами проставляются точка с запятой в конце строки, кто знает как это настроить?)
палец вверх от СЕООНЛИ!!!!!!!!
Подскажите стоит смотреть с этого если спринг не изучал до этого
думаю нет,потому что ни хрена не поймешь. я прошел курс Алишева , написал маленький проект и даже после этого когда смотрел ничего не понял. раза 10 пересмотрел и вроде на 80% понял
это можно понять только спустя годы работы, я начал это понимать где после 5 лет на спринге, до этого все это было просто как пустой звук
По поводу того, что спринг выбирает механизм проксирования CGlib или DynamicProxy,... он всегда использует Cglib, всегда
Доку быть хоть почитал, как он создаст Gglib, если мой бин не наследуется ни от одного интерфейса?
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.
хуйню не пиши, dynamic используется если класс имплементирует интерфейс, если нет будет cgLib
Классный урок. Но оператора я бы выгнал. Показывать лектора крупным планом без доски большую часть времени, это супер. Наверное оператор считает, что в размахивании руками информации больше, чем в примерах на доске.
Жесть конечно как тяжко всё это воспринимать человеку недавно зашедшему в спринг, по 20 раз пересматриваю каждый момент, чтобы понять что он там пытался осветить.
Так и не понял как он "решил" проблему с Lazy в самом конце.
11:37
26:24 - "то ему придётся делать очень сложную работу..... " - Евшений Борисов, Вам удаётся совмещать стендап комеди, с обучением программированию, и программированием людей на выполнение очень сложной работы. Х))
айбернет😂👍👍👍👍
правильно будет hайбернет. букву h в русском алфавите не хватает.
норм) обычный жизненный цикл бина... по поводу eventLiteners конечно накручено я думаю это было просто сказано в образовательных целях сомневаюсь чтобы вот так извращались в рядовых проектах обычно все заканчивается на postProcessAfterInitialization
А МОЖНО Оборватьь
Не знал что Гарик в Спринге шарит.
Вот бы скорость 0,9
28:16 - Евгений Борисов, небольшая поправка -Первый подход - это циглиб (когда класс не имеет интерфейса или класс файнал(с ваших слов)), а второй это динамик прокси.
Вы просто 5ю секундами ранее говориле сначала о наследовании от классов, а потом как второй вариант от интерфейсов, и следом вы НАЗЫВАЕТЕ эти подходы как Динамик прокси и "вторым" Вы называетее циглиб.
че
мужик говорит в x2
ты бесиш
Для меня недоходчиво было от слова совсем, автор изъясняется на эльфийском, нужно смотреть каждое второе слово в словаре. Терминологии, которую объяснил вначале, раз-два и обчёлся.
Шкода, що па рускі
Можно включить субтитры
Тем не менее ты его знаешь и понимаешь, в чем проблема?
@@Bogdan666gabov погано сприймається
спринг - говно
Помогите! в конце этого видел, где Борисов пишет "3ю-фазу конструктора", на вот этом моменте
@Autowired
ConfigurableListableBeanFactory factory;
... у меня почему-то вместо в фабрики инжектится null
Говорят, это частая ошибка а, если компонент незареган в Контексте, но кого нам регистрировать, Фабрику Спринга что ли??)
В общем я уже все до буквы за Борисовым переписал, стэковерфлоу твердит про причины см.выше, которые по идее не имеют отношения к нашей ситуации. . .
Этот доклад прям на цитаты можно разбирать:
"Лучше получить эксепшн, чем жить с каким-то нулем",
"Не буду catch блок пустым оставлять - грех".
"трай и кетч всегда некрасиво и плохо сказывается на нервной системе" :)
Еще это: "Если у внутреннего компонента спринга класс меньше двадцати букв, то это просто несерьезно" ))
@@hramovalexey Либо как в части про профилирование: "Если стоит - то ему придется делать сложную работу"
"А кто здесь не грешил? ))"
08:30 BeanPostProcessor
25:15 Профайлер, JMX
49:00 ApplicationListener
Спасибо!
Огромное спасибо за такое видео. Чел просто супер объясняет. Побольше бы именно такого плана видео.
Если у программистов есть хороший тон и правила чистого кода, то у ведущего (в данном случае докладчика) не должны быть "айбернейты" , "собаки", также эмм ымм бээем. При всем уважении.
@@azamatk4302 так вам шашечки или ехать? :)
@@BiteMyBrain Посмотрел далее ... Доклад отличный! По вашей аналогии, примерно как сесть в такси бомбилы из Кавказа :) Водитель с акцентом, но душевно что-то рассказывает =)
Офигительный доклад, спасибо!
Спасибо вам огромное. Один из самых приятных докладов. Евгений отлично рассказывает, все очень последовательно и по делу.
Доклад очень хороший . Только недавно начал работать со Спрингом . после доклада стало намного понятнее как он работает . Супер !
Gut gemachen, Evgeny!
Легендарный доклад
Кто эти люди, которые поставили дизлайк!!??
Доклад на высоте, спасибо.
Лекция супер. Если кому интересно, то рандом так игрался из-за того, что в метод передаем не разницу, а сумму (смещаем отрезок)
Один из лучших технических докладов на русском языке
на иврите же :)
Пока смотрела все было понятно. На следующий день хотела повторить- вообще ниче не помню! А вообще, доклад- супер. Если эта инфа и есть в оф доках, отфильтровать ее самостоятельно было бы очень не просто
+
Где посмотреться второй часть?
+1 за Therion
Не пропущена ли часть видео где Евгений с пакетом qualifiers играется?
еще ПрОфиль и профИль.))) Лекция супер.
Евгений крайне интересно вещает, запись смотрится на одном дыхании, но всё время меня не покидала мысль, что поведением похож на Александра Якушева("Курск" КВН)
а я смотрю и думаю, кого же он мне напоминает
можно и заимплементить интерфейс BeanFactoryPostProcessor и доставать через рефлексию нужны поля, разница только в том, что BeanPostProcessor работатет уже с проиниализироваными полями обьекта, а BeanFactoryPostProcessor - после загрузки бинов в контейенер
dzone.com/articles/spring-bean-lifecycle
У enabled флага volatile не нужен?
Здесь не многопоточность
Лекция отличная, но раньше я думал что говорят "поднимусь повыше" скроля вниз только люди 60+
на 0,75 нормально смотреть
Смотрю на 2.0
))))) и голос, как-будто 0,75 хряпнул
Тоже сначала увеличивал, потом вернул обычную
Да, редкий пример, когда человек не нудит и все говорит по делу. Очень хороший докладчик. Смотрел на 1 с частыми перемотками назад.
21 сишарперов дислайкнули
59:00 если бин создан через метод в @Configuration то getBeanClassName вернет null же?
Если речь идёт про метод, аннотированный @Bean и подобные, то насколько я знаю, спринг генерирует имя бина по имени метода.
вы не нашли ответ почему так происходит?
Думаю что getBeanClassName и здесь нормально отработает, т.к. в BeanDefinition название класса бина возьмется как имя название возвращаемого объекта
А как происходит консолидация (объединение) результатов работы методов postProcessAfterInitialization разных BeanPostProcessor'ов?
Ну то есть...Пусть есть 10 моих кастомных аннотаций, которые меняют логику бина, добавляя к его методам 10 соответствующих функционалов. Делаем 10 BeanPostProcessor'ов (далее BPP). Это нужно делать на стадии AfterInitialization и возвращать в методе postProcessAfterInitialization прокси с добавленным функционалом.
В каком порядке сработают мои 10 BPP?
Что после отработки всех 10 BPP будет в контейнере: один прокси объект (объединяет в себе все функционалы) или 10 разных прокси оберток над оригиналом?
Ну то есть в итоге же я должен получить bean, к оригинальной реализации которого накручено 10 функционалов. Как это получается? Это многослойная прокси обёртка получаетя?
Думаю первый раз создастся прокси над оригинальным классом, а потом будут создавать прокси на предыдущим прокси и так 9 раз. И результирующий прокси будет выполнять весь функционал. В каком порядке будут вызываться BPP это не должно быть важно. Если это важно, т.е. Вам нужно чтобы логика одного BPP срабатывала прежде другого BPP, то тогда нужно пересмотреть эту логику и возvожно объединить в один BPP.
Сильно не ругайте за вопрос - только начинаю изучать spring. Разве нельзя делать профилирование такого типа через spring AOP?
Можно конечно. Но цель доклада немного глубже конкретной задачи профилирования). AOP ведь тоже работает через proxy, а после доклада складывается впечатление, как оно может быть реализовано.
чет у меня нет там такого плагина в списке
Что нужно знать, чтобы это видео было полезно? Я знаю только Java Core и SQL. Будет какой-то толк? Или посоветуете что-то прочитать?
Ето точно не для новичков, ето для тех, кто уже нормально ознакомлен со Spring
Igor Vasylevskyi ну вот и я так думаю, а много людей мне советуют эти видео, когда я у них спрашиваю о инфе про спринг
@@igorvasylevskyi3629 По мне, так новичку надо смотреть минимум два раза - сразу и после того как поковыряешься в спринге. Первый просмотр просто много чего в голову откладывает, а второй - уже рассортировывает.
Дайте линк на картинку, которая в начале лекции. Которая "Спринг в картинках"
vk.com/doc4606_318090168
Этот документ был удалён из общего доступа.
2014.jpoint.ru/presentations/Borisov_spring.pdf
2014.jpoint.ru/presentations/Borisov_spring.pdf
Не совсем то докладчик называет namespace-ами.
Кидает налл поинтер. В поле BeanDefinition beanDefinition = factory.getBeanDefinition(name); factory = null
В чем проблема?
В мене був NPE через те що я в методі postProcessAfterInitialization(Object bean, String beanName) забув змінити return null на return bean. Можливо вам допоможе)
+Roman Chmeluk В общем-то упущение в дизайне фреймворка, что он не хэндлит такое. Тем более что IDE при генерации метода по умолчанию вставляют "return null;", и это всем известно.
не забыл ?
или AutowiredAnnotationBeanPostProcessor для лучшего усвоения материала )
вы не нашли ответ почему так происходит?
актуально в 2019?
не очень, хотя старьіх проектов с xml есть много еще
ruclips.net/video/nGfeSo52_8A/видео.html с 2:10
Igor Vasylevskyi
👍🏼👍🏼👍🏼👍🏼
Всегда актуально, технология же не меняется.
Спринг изучаю не так давно, и все время меня коробило чувство, что за меня кучу работы делает Господь Бог. С одной стороны хорошо, но с другой - я не мог точно знать, как он это делает, а непонимание процесса до конца вызывало дискомфорт. Это все равно что играть в игру не до конца понимая её правила. С этим видео хоть что-то проясняется. Ещё заметил, что многие вещи в Спринге становятся более понятными, когда ты до этого велосипедил их вручную.
Michael Morrison Ели брать только Java SE, то тут не соглашусь, тут чистый кодинг, а вот EE и Spring , то есть где в дело вступают контейнеры, то там поначалу очень много временем уходит на понимание работы этих контейнеров, так как львиную долю работы выполняют именно они. Есть конторы, которые сводят к минимуму использование фреймворков, и пишут свои библиотеки, чтобы иметь более полный контроль над кодовой базой.
Michael Morrison Я спринг читаю в метро по дороге на работу для общего развития, прямо сплошняком по reference. Хоть и не пользуюсь, а кругозор расширяет ))
бля, теперь и я тут
ска теперь и я в вашем ебучем спринговом болоте🤦♂️
Мёд для ушей.
сахар для кода
творог для костей
Синхронизация для потоков
Москва для москвичей
Скайрим для нордов
На Харламова чем-то похож.
Interesting; however, despite the fact, that I understand Russian well, you're talking way too fast, man.
payback speed = 0,5; subtitles enable?)
Молодцы ребята,очень интересный ролик.
Кто хочет почитать или просто угареть от еще одной теории о том что на земле лесов нет:
www.as-gard.com/30-metrovye-kusty
Я 10 лет работаю с явой, примерно лет 7 назад удалил spring из все проектов и слава богу. Перешел на Guice. Но на самом деле и Guice особо не нужен. Написал свой маленький Injector. Чем меньше чужого кода в твоих проектах, тем лучше. (Hibernate кстати тоже снес)
и как работаете з базой данных?
У современных баз данных mongodb, redis, google datastore, cassandra есть своей api, плюс я использую свои утилиты или можно библиотеки написанные другими людьми. В крайнем случае можно jdbc напрямую, через опять же свои обертки. Скорость, простота и предсказуемость решения важнее, чем мнимое удобство hibernate.
Smychagin Alexei вы один над своим проектом работаете, или остальные разработчики выучили ваш инжектор? а как же spring data, mvc, batch...
миллионы девов юзают спринг, а тут я один на белой лошади. А заказчик знает, что он оплачивает создание велосипедов за его деньги?
Предсказуемость реализации и собственный велосипед когда уже есть масса стандартных - это взаимоисключающие параграфы.
Мда спринг очень гибок, даже слишком гибок, я лично предпочитаю больше EJB3.2 и очень стандартизированную архитектуру, блин зачем Оракл отдал JEE в Eclipse, ведь так всё было хорошо и стабильно, теперь клиенты всех хотят Спринг, теперь стринг надо всем джавистам учить.
че серьезно?) реально возникла проблема с тем что кастомеры говорят "не хотим ЖЕЕ"?)
Ну да иначе я бы этом здесь не писал