ПОЛНЫЙ КУРС ПО SPRING: swiftbook.org/courses/438 Плейлист этого курса: kzbin.info/aero/PLAma_mKffTOR5o0WNHnY0mTjKxnCgSXrZ Telegram: t.me/alishev_g
@wetergshsghsfghsfh4 жыл бұрын
Обнаружил интересный момент: первый prototype-бин, так же как и singleton, создается при старте контекста, даже если далее он ни где не используется. Наиль, подскажите пожалуйста, что с этим бином дальше происходит? Он просто остается в памяти до первого прохода GC (мое предположение, думаю так, в виду того, что сильных ссылок на него ни где нет) или существует все время работы контекста? Если существует, то можно ли от него избавиться как-то?
@chaosmike24184 жыл бұрын
@@wetergshsghsfghsfh я канеш не Наиль =), но у меня бины ( prototype ) создаются только при созднании ( инициализации ) этого бина. Если не прав, поправте.
@genndy45384 жыл бұрын
Spring почему-то может вызывать заприваченные конструкторы и создавать объекты. Причём без объявленного фабричного метода. С чем это может быть связано? upd: мы сами не можем вызвать данный конструктор с main, что и ожидается. Я, конечно, не эксперт по безопасности, но это дыра в безопасности, связанная с Spring. Нужно ли латать данную дыру?
@chaosmike24184 жыл бұрын
через рефлексию можно вызывать и менять даже приватные поля/методы
@genndy45384 жыл бұрын
@@chaosmike2418 совсем забыл про эту "замечательную" возможность.
@denisluke71914 жыл бұрын
Не могу не похвалить отлично поставленную речь, качество записи и шикарное произношение на английском. Я в диком восторге.
@alishevN4 жыл бұрын
Спасибо!
@RuslanMurzin-uz8fj Жыл бұрын
Английский так себе. Но это дело наживное. Спасибо за курс !!!
@АлександрСоколовский-ч7к2 жыл бұрын
Учусь уже на третьем курсе, на далеко не самой плохой специальности, но получаю больше полезного материала на бесплатном ютубе, чем в универе за немаленькие деньги. Спасибо за вашу деятельность уроки на 42 из 10)
@maudeblanche67234 жыл бұрын
Огромное спасибо за понятные и простые уроки. Такие видео стоит ждать столько, сколько требуется. Тем более, что автор делится знаниями на абсолютно добровольных началах и ничего никому не должен. Терпеливо мониторим обновления.
@cmygeHm3273 жыл бұрын
43 тысячи просмотров только одного видоса из всего курса! Это очень круто! Это реально нужно людям, люди смотрят, учатся. Очень круто! Спасибо огромнейшее!
@sergeigroshev3 жыл бұрын
Большое спасибо, Наиль! Твои видео и объяснения, лучшие и наверное единственные из русскоязычных с хорошо поставленной речью! Приятно слушать, смотреть и учиться.
@yuratsiunel98955 жыл бұрын
Офигенные уроки, жаль выходят редко ((
@konstantinmatushenko58315 жыл бұрын
Наиль, продолжай пожалуйста. Очень нужны твои уроки
@alex.zaslavskyi4 жыл бұрын
Реально лучшие уроки, что я встретил по Спрингу, без воды, все по сути. Еще и небольшие самостоятельные задания есть :) Лучший!)
@Constructor113 жыл бұрын
Наиль, превращаешь Спринг в приятную игрушку, доступную пониманию для всех и каждого ) Спасибо!
@Dermidont3335 ай бұрын
Огромное спасибо за столь доходчивое и грамотное объяснение!
@ДенисГайвер-ю8р2 жыл бұрын
Благодарю Вас! Просто великолепно предоставляете материал. Слушать Вас - одно удовольствие! Вы очень большой молодец!!!!!!!!!!!!!!!!!!!!!!!!!
@Roman-kpax5 жыл бұрын
Спасибо тебе за то, что ты делаешь!
@ak_medvedev5 жыл бұрын
Как всегда на высшем уровне
@ВалерийМихайлов-ы9г5 жыл бұрын
Наиль пили есчо! Всё посмотрел) Очень годно! Молодец!
@KentAVP4 жыл бұрын
то чувство когда за час просмотренных лекций узнал столько же сколько на 300 страницах книги про спринг
@cannibalirk30553 жыл бұрын
Смотря какая книга. Но там иногда очень глубоко копают, что одновременно может являться как плюсом, так и минусом.
@Narryel3 жыл бұрын
плохо читал значит)
@romanfp46115 жыл бұрын
Шикарные уроки, особенно перед собесом повторить))
@littleknight78764 жыл бұрын
устроился?
@JohnDoe-lc3tc4 жыл бұрын
Как кайфово, что рефакторинг гуру продвигается в массы!
@vitaliimaistrenko52185 жыл бұрын
Благодарю, всё очень доходчиво
@Andrzej39353 жыл бұрын
Лучшие уроки из всех что встречал, продолжайте!
@АлександрСоколовский-ч7к2 жыл бұрын
Очень нужен курс по Hibernate от вас, а то после вашего подхода индусов вообще невозможно воспринимать в качестве лектора. С огромным удовольствием стану спонсором, как только найду способ, так как все карты не подходят.
@Сергей-н7с6у5 жыл бұрын
Наконец-то, спасибо за урок!
@omar_akkulov3 жыл бұрын
Огромное тебе спасибо, Наиль, за такие прекрасные уроки)
@FightingFalcao4 жыл бұрын
Паттерн проектирования "Фабричный метод" заключается в делегировании создания объектов с которыми работает класс классам-потомкам. Для этого создается абстрактный метод напр. getInstance() который возвращает нужный объект, а его конкретная реализация определяется в классах-потомках. + Даже если сделать конструктор приватным, у спринга все равно получится создать объект даже без фабричного метода, предположу, что из за использования механизма рефлексии доступ к приватному конструктору все равно есть.
@TrololoWoT5 жыл бұрын
классные уроки. как человек не разбирающийся ещё в spring ожидал здесь же увидеть порядок destroy от зависимостей(если они вообще есть) и как передавать параметры в фабричный метод(опять же если есть). пойду погуглю.
@ЕвгенийОмельченко-ы6щ3 жыл бұрын
Спасибо. Продолжайте!
@ak_medvedev5 жыл бұрын
Когда следующий планируется?)
@Krasnolesye2 жыл бұрын
Молодца. Умеет объяснять!
@cannibalirk30553 жыл бұрын
Всё понятно и доступно, но хочется более сложного примера)) с реальным применением.
@OREH885 жыл бұрын
Спасибо за сайт с Паттернами!!!
@ТимурОлевский3 жыл бұрын
Момент про то, что singleton с фабричным методом остаётся singleton, был для меня новым. Спасибо
@ОлександрРадовець-ы6т3 жыл бұрын
без води ... гениально... Огромное спасибо>>>
@nickolaykozachenko6714 жыл бұрын
Спасибо, отличные уроки
@shapirovet4 жыл бұрын
Наиль, отличные уроки! Спасибо!
@andrii.kukuruza5 жыл бұрын
Супер! Жду продолжение!
@ГайратМадумаров-ю2я3 жыл бұрын
Спасибо за ваши уроки. Без сомнения это лучшее что я видел. Маленькое замечание по фабричному методу, возможно его стоило поместить в MusicPlayer ведь не очевидно как бы тогда описывался этот метод в контексте.
@КонстантинМатвеев-ж6ц5 жыл бұрын
Урааа!! Спасибо огромное!!!
@ВладиславШестернин-б9с5 жыл бұрын
Ураааааа!!!!) Новое видео!!!) Спасибо)))
@christinabredis88775 жыл бұрын
Spasibo!
@Alexander_Kaidalov2 жыл бұрын
Очень достойные уроки. Наиль, спасибо! Вот что значит есть способности к преподаванию.
@МихаилКатков-м8х5 жыл бұрын
Наконец то 🤟🏻🤟🏻🤟🏻🤟🏻🤟🏻🤟🏻
@klasterdev1545 жыл бұрын
ждём новые видео)
@nedonegr4 жыл бұрын
Очень здорово, получается, синглтон создаётся сразу в контексте, а прототайп только в случае вызова метода гетБин(). Если же не закрывать контекст, все синглтон бины остануться висеть в памяти, вот одна из причин, почему вааажно закрывать контекст. Спасибо, супер наглядно получается с методами инит() и дистрой().
@AnnaIsHere4 жыл бұрын
Видео закончилось на самом интересном))
@alishevN4 жыл бұрын
Скоро будет продолжение))
@ktyz19924 жыл бұрын
Подскажите пожалуйста, зачем при вызове метода context.getBean мы кроме названия (id) бина вводим ещё второй параметр ClassicalMusic.class. Казалось бы зачем, мы же в XML-ке уже указали ссылку на него в свойстве class="x.x.x.ClassicalMusic". Зачем нужно указываться ещё раз?
@wasd__0 Жыл бұрын
кстати, в spring по-умолчанию используется eager-инициализация для скоупа sinlgeton и lazy-инициализация для скоупа prototype... если вам нужно поменять тип инициализации, то при объявлении бина нужно добавить тег lazy-init замечание: у prototype скоупа всегда будет lazy-инициализаци (что логично)
@alexander_brun3 жыл бұрын
Spring умный, даже не прописывая factory-method в XML - сам догадывается как нужно работать.
@olegpicik3634 жыл бұрын
Почему то сделал конструктор приватным, фактори метод еще не делал, решил проверить, спринг создал объект нормально. Ему видимо все равно на модификатор конструктора)
@markg23033 жыл бұрын
за год ничего не поменялось)
@Libra7by3 жыл бұрын
@@markg2303 Если не ошибаюсь, то фабричный метод нужен не Спрингу, а самому приложению для реализации специальной логики. Для приложения конструктор будет закрыт, как положено, и фабричный метод будет работать.
@vladimirblagin31054 жыл бұрын
8:05 не очень четко объясняется жизненный цикл бина в этом месте. Если бин описан в scope Singleton, то он будет создан и инициирован до вызова метода getBean, если же бин описан в scope Prototype, то создание и инициализация бина будет при вызове метода getBean, что естественно. 16:24 Spring не обращает внимания на приватность конструктора и спокойно умеет создавать объекты через new даже на приватном конструкторе (так же как и приватность методов init и destroy не имеет значения для Spring)
@математикАртем4 жыл бұрын
то есть Prototype и есть lazy init..
@ilyababcenco68644 жыл бұрын
Немного не понял с factory method, если я не указываю этот параметр в applicationContext и конструктор приватный, у меня полюбому объект класса ClassicalMusic создавался.
@alexanders10682 жыл бұрын
Я попробовал factory-method на двух bean в singleton и prototype scope. Для проверки вставил в фабричный метод (getClassicalMusic) вывод на экран "println("factory-method used")" перед "return new ClassicalMusic()". Оказалось, что метод getClassicalMusic() вызывается, как при создании объекта в singleton scope, так и при prototype scope. Но при prototype scope каждый объект с разным hash code. Получается автор под конец неправильно сказал про factory-method в prototype scope?
@МАКСИМКОТОВ-о2ч5 жыл бұрын
We love you!
@xackuuu4 жыл бұрын
Добрый вечер) Спасибо за ваши курсы) Очень поучительные) Хотел спросить почему у вас подсказки выходят на хмл. Тоесть если есть метод и вы пишите factory method он подсказывает какой метод нужен 16:50 , но у меня такого нет в idea( Как быть) Заранее спасибо)
@ama_zoomer2 жыл бұрын
Вопрос, а почему у меня Spring-у получилось создать объект, когда я прописал factory-method, но не указал ему, что надо использовать factory-method? Он ищет подходящий метод автоматически?
@ama_zoomer2 жыл бұрын
А, я нашел, почему. Spring настолько крутой, что он может с помощью reflections (не знаю, как правильней будет на русский перевести) делать конструктор доступным.
@Das.Kleine.Krokodil2 жыл бұрын
Подскажите, что нужно внедрять через @Bean, а что создавать явно через new? Чем руководствоваться при принятии решения?
@seoonlyRU2 жыл бұрын
Лайк неглядя от СЕООНЛИ
@НатальяШевченко-м6н2 жыл бұрын
Добрый день подскажите пожалуйста, если создать бины других классов метод init и destroy, которые определены только в Classicmusic, все равно выводятся в консоль?
@ilavio7774 жыл бұрын
Что то init метод прошёл а вот destroi нет, в конце метода main есть запуск context.close; ? Eclipse среда если что.
@ms_shifu70475 жыл бұрын
мы уже скучаем по @ннот@циям
@himamahmudov81225 жыл бұрын
При использовании factory method имеется ввиду фабричный паттерн как я понял. Но с другой стороны если метод создания объектов статический то мы не сможем переопределить этот метод и тогда отпадает смысл самого фабричного паттерна. Нам придетсся для каждого класса создавать свой create метод и спрашивается зачем нам тогда фабричный паттерн? Можете объяснить, пожалуйста
@cmygeHm3274 жыл бұрын
Дестрой бинов происходит в результате context.close()?
@Narryel5 жыл бұрын
Урааа, видосик
@aleksandrivashinin Жыл бұрын
При запуске приложения: 1. Срабатывает весь код, написанный до чтения из контекста. 2. При чтении из контекста начинают создаваться бины, сначала срабатывает конструктор бина, затем инит метод, затем следующий бин и т.д. 3. Когда мы закрываем контекст, срабатывает дестрой метод. 4. Потом весь код после закрытия контекста. 5. Программа завершает работу.
@stanislavshilo60223 жыл бұрын
Что важно, даже если я создам приватный конструктор ClassicalMusic, я не смогу создать объект словом new, но Spring может создать этот объект
@gmaster1005003 жыл бұрын
Потому что Spring использует Reflection API и джавовские конструкторы он не использует вообще.
@mopo3ujibhuk3 жыл бұрын
Это вообще круто.
@ЕвгенийКрупин-м2з3 жыл бұрын
@@gmaster100500 Это вряд ли. Конструктор не только присваивает значения, но и может производить другие операции. Если их не использовать, это значит отбросить логику создания объекта заданную разработчиком.
@ПавелСергеевич-п8ж5 жыл бұрын
Хмм, у меня при scope="prototype" и 3 вызовах context.getBean инициализация выполняется 4 раза, при двух вызовах context.getBean 3 раза, при одном вызове context.getBean 2 раза. А в видео говорится, что число инициализаций соответствует числу вызовов метода. Это я что-то делаю не так, или ошибка в видео?
@alishevN5 жыл бұрын
Посмотрите, может где-то создается еще один объект (например он внедряется в тот объект, который вы получаете с помощью context.getBean()).
@ПавелСергеевич-п8ж5 жыл бұрын
@@alishevN Да, спасибо разобрался. У меня в бине musicPayer лежал контейнер со списком ссылок на другие бины, и когда закомментил в нем ссылку на этот бин стала выполняться только одна инициализация. Я думал что бин не инициализируется пока не вызываем context.getBean, но в случае со списком видимо идет инициализация в момент new ClassPathXmlApplicationContext
@mkrugl4 жыл бұрын
Этот бы вопрос в топ, а то столько людей не понимало что происходит. (В том числе и я 😄).
@Роман-й7к1з4 жыл бұрын
Заметил кое-что интересное: если мы получаем prototype бин, то init-method вызывается, если не получаем и не создаем зависимость от него, то init-method не вызывается
@RenatF4 жыл бұрын
Хорошо, что достаточно текста в презентациях. У кого нет слуха, думаю, лучше смогут лучше понять материал
@Das.Kleine.Krokodil2 жыл бұрын
Спасибо
@АлександрМакаров-ъ9ъ8б4 жыл бұрын
Сделал приватный конструктор и Spring все равно успешно инициализирует бин через Reflection API
@alishevN4 жыл бұрын
Да, о рефлексии у меня есть уроки здесь: www.udemy.com/course/javarussia/?referralCode=A36A8387475CAFDC6776
@chokkitv3792 жыл бұрын
круто!
@vladklichko556 Жыл бұрын
чем отличается создания объекта через init и через factory-method?
@GoPetr5 жыл бұрын
Ураа
@HNKN4 Жыл бұрын
Если Spring вызывает указанные init/destroy methods, но мы можем их не указывать явно. Значит ли, что у таких методов есть дефолтное значение?
@gevorgmkrtchyan79394 жыл бұрын
Does garbage collector delete the object after calling the ''destroy'' method?
@HNKN4 Жыл бұрын
Получается Spring вызывает init method два раза? При создании объекта и после внедрения зависимости?
@OHOTOJIE13 жыл бұрын
Мало-ли кто-нибудь такой же лопух как я. Если у вас в singletone бине запускается только Init метод а destroy не работает, скорее всего вы закоментили или удалили метод context.close() Два часа мучался пока не сообразил.
@Виктор-э1ы6с5 жыл бұрын
Уже несколько уроков не дает покоя вопрос. При создании экземпляра класса (например MusicPlayer) мы дважды ссылаемся на сам класс: сначала в xml application context (class="ru.alishev.springcourse.MusicPlayer"), а затем в самом джава-коде, при создании бина (MusicPlayer.class). К чему это дублирование? Почему в джава-коде нужно снова явно указывать класс если мы его уже указали в xml application context? Это очень странно
@ГорбуновЕвгений-з2н5 жыл бұрын
когда мы вызываем getBean("name") в коде, мы до этапа выполнения, ничего не знаем о applicationContext.xml и какие бины -> каким классам соответствуют. А с объектом нам нужно дальше работать в коде, следовательно его необходимо привести к нужному нам типу, например к общему интерфейсу или предку и использовать далее (в нашем случае просто к нашему классу). А вызов getBean("name", "class") - просто перегруженный метод, чтобы не приводить тип вручную.
@manOfPlanetEarth4 жыл бұрын
Горбунов Евгений 🤦♂️🤦♂️🤦♂️👊🏼 клоун, как это мы ничего не знаем об applicationContext.xml, если мы на ЭТОМ же контексте и вызываем getBean(id)!!!!!🤦♂️🤦♂️🤦♂️🤦♂️
@Lorienl2master3 жыл бұрын
так их не будет уничтожать сборщик мусора из ява кор?
@ВиталийТимонин-и6д3 жыл бұрын
Так получается нет никакого смысла создавать фабрику на синглтоне? Она ведь как раз и предназначена для создания множества объектов? То есть надо использовать scope прототип? Или нет? Какой смысл в фабрике тогда? Или это способ адаптации фабрики в уже используемом классе под спринг? Объясни плиз поподробней.
@Libra7by3 жыл бұрын
Правильно ли я понимаю, что Спринг - это большой сложный многофункциональный патерн "Абстрактная фабрика" (и не только)? До ваших курсов немного почитал книгу "Head First. Паттерны проектирования" - и прям ловлю вьетнамские флешбеки.
@iljushka71985 жыл бұрын
Spring Boot Rest будет через два года? :D
@dmitrylubyanov72774 жыл бұрын
Немного не понял, но у меня почему-то создается экземпляр класса с приватным конструктором. При том что фабричный метод даже не создавал.
@alishevN4 жыл бұрын
Это благодаря рефлексии.
@manOfPlanetEarth4 жыл бұрын
напиши сюда этот код
@zaordu44272 жыл бұрын
Чем init-method принципиально лучше конструктора/инциализатора класса? добавил в класс с музыкой, он вызывается даже раньше init'a (вне зависимости от scope). з.ы. ролики просто шикарные, огромное спасибо за труд автору
@komdiv4906 Жыл бұрын
Если внедряются зависимости в поля то init-metod будет уже знать о них, а конструктор еще нет.
@RuslanMurzin-uz8fj Жыл бұрын
Начиная с Java 11 чтобы javax.annotation.PostConstruct и PreDestroy появились нужно добавить зависимость javax.annotation-api
@sokprorok603710 ай бұрын
Сделал все, как в уроке, но дестрой-метод не отработал (сообщение не вывелось, будто его и нет). А инит-метод отработал. В чём может быть дело? Scope поставил "singleton".
@сайфумаликАй бұрын
надо закрыть контекст и тогда появится
@АлексейБуторин-в1т2 жыл бұрын
Материал подается очень доступно и понятно. Хочу продолжить изучение (купить курс на udemy). Как оплатить курс рублями в РФ (не используя биткоины) ? Спасибо.
@alishevN2 жыл бұрын
Здравствуйте, Алексей! Курс доступен в РФ вот здесь: swiftbook.org/courses/438
@slavkinsmoke382 жыл бұрын
Я думаю стоило рассказать про destroy-method подробнее, потому что если выскочит исключение, то destroy-method не сработает и как этого избежать
@mahmoody8913 Жыл бұрын
Refactoring guru уже не торт =((
@b.s.31054 жыл бұрын
привет Нил, я вот напоролся на один факт на 8:32 минуте ты обесняеш когда вызывается эти 2 метода только вот я удалил полностю создание обьектов в методе Main и оставил создание обьекта ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); и закрытие его так вот эти методы вызвались ...... как я понимаю не зависит от того создаёш ты бины или нет в Main-e это работает на подобие Статик Блока в Классе
@МихаилКатков-м8х5 жыл бұрын
В плане init метода - пишут что его желательно явно указывать в случае когда используется инъекция через setter.Инфа со стака так что полной гарантии в правдивости не даю)))
@arthurshishko18414 жыл бұрын
Почему если поставить scope как prototype, то init метод вызывается два раза?
@eraeletay80203 жыл бұрын
потому что создается 2 объекта (бина), и срабатывает инит метод каждого из них
@ЯрославКозыревич-е5ф3 жыл бұрын
Потому, что у нас есть ещё bean musicPlayer, который зависит от бина, который вызывает метод init, но у musicPlayer scope = singleton, и зависимость должна внедриться ещё до метода musicPlayer.getBean(), а именно при вызове метода classPathXmlApplicationContext(), соотвественно создаётся объект первый раз при вызове classPathXmlApplicationContext для musicPlayer, а после этого создаётся объект при вызове метода getBean для класса в котором есть наш метод init
@4gkage3 жыл бұрын
Еще стоит упомянуть что инит метод не может выбрасывать проверяемые исключения
@arcadyivanov3 жыл бұрын
В уроке 8 для фабричного метода подойдёт модификатор private. Spring-у метод будет доступен. А вот юзер уже никак не создаст объект мимо Spring-а.
@Slashh2 жыл бұрын
Наш лектор в университете дал ссылку на твои видео :) Зачем им платят, не понимаю?
@torezracerful2 жыл бұрын
Я конечно не спец, но не корректнее ли называть "паттерн проектирования", ведь строится архитектура приложения?
@ayrat113 жыл бұрын
Почему с приватным конструктором единственный способ создать объект это паблик статик фабричный метод? А как же рефлексия?
@АртемПервенецкас-ш7я5 жыл бұрын
Круто! Очень хорошие уроки) В конце можно было проще немного сказать, что factory-method не влияет на scope)
@thealekss20063 жыл бұрын
Не пойму один момент. Если программисты такие ленивые, все пытаются упростить, то почему при getBean вместе с указанием ID нашего бина нужно указать класс? Насколько я понял ID - уникальный идентификатор бина. Почему этой информации недостаточно?
@andriiostashevskyi34654 жыл бұрын
@PostConstruct аноташка сечяс актуальна.. так как от xml стараются отказиватся
@Light-qo9vo5 жыл бұрын
Уроки супер, на практике очень быстро всё воспринимается!! Интересно почему прописуешь бины через xml? И планируешь ли в будущем уроки с аннотациями?