А почему в некоторых видео вы говорите, что спрингу нужен конструктор без параметров(и действительно приложение не запускается). А здесь не пишите конструктор без параметров(и все работает). От чего это зависит? Я правильно понял, что если объект без объектов внутри, то нужен конструктор без параметров. Если объект с объектом внутри, то конструктор без параметров не нужен?
В русскоязычном сегменте очень не хватает таких видео. Но вообще бомбой было бы взять один хоть даже мини проект и сделать его по всем правилам от 0 до продакшена.
@@Дмитрий-ж5ю6х Смотрел уже у него тоже много полезного вот только большинство лекторов дают обзорно а было бы круто если взяли бы один небольшой но полноценный проект и допилилибы его до конца.
Какой же автор все таки красавчик, так четко все по полочкам по Спринг Кору. Для меня этот цикл лекций прояснил больше чем 3 и 5 издание Spring in Action вместе взятые.
Внедрение через поле является плохой практикой, т.к. потом столкнетесь с проблемой во время написания тестов. Лучше использовать внедрение через конструктор, если это возможно, иначе - через setter. А так хорошее видео, лайк ;)
Об этом даже говорит IDEA но кто смотрит на это :) Да и вообще @Autowired вовсе не обязателен. Еще момент про сканирование очень плохо раскрыт в реальном проекте лучше указывать как можно точнее пакеты которые нужно сканировать, это уменьшит время сканирования и поможет избегать конфликты.
@@manOfPlanetEarth Начиная со Spring версии 4.3, если в вашем классе есть только один конструктор, можно не ставить аннотацию @Autowired на него и Spring будет по умолчанию внедрять зависимости через этот конструктор. Тем не менее я предпочитаю всегда ставить аннотацию @Autowired, так как это делает код более читабельным и понятным (некоторые люди могут не знать об этой "фишке", а если стоит аннотация @Autowired то все сразу понятно).
Очень часто смотрю Ваши уроки, начинал с самого начала о джаве, сейчас уже устраиваюсь на работу. Большое Вам спасибо, всё очень круто, успехов в работе и крепкого здоровья!
Привет, да, устроился, на рынке сейчас тяжело. Честно, сложного почти ничего не было, на джуна много не спрашивают, чего не знаешь - доучишь на испыталке, так что нужно пробовать. Больше подучить теорию перед собесом и не волноваться, говорить медленно и уверенно, особенно про полиморфизм и конечно примеры из жизни :)
@@romanihnatov5629 спасибо за ответ) ты город не указал. москва/питер или др? просто в первых двух всегда побольше вакансий для джунов. а в остальных городах очень мало вакансий для джунов всегда. меня москва/питер интересуют)
5 лет рботал Unity разработчиком, теперь вот решил переучиться на Java Enterprise и пытаюсь разобраться со Spring, надеюсь через несколько месяцев у меня все получится))
Наиль!!! Огромное спасибо!!! По твоим видео я начала учить джаву! А на этой неделе будет мой первый рабочий день в качестве джуна))) Кстати вопрос про аннотацию Autowired был на собесе!!! Спасибо огромное!!! Только не бросай канал, пожалуйста, он нам очень нужен!!!!
Ира, привет! Расскажи, пож-та, как продвигаются твои дела на работе? Москва же? На сколько собеседований пришлось сходить, каков спрос на джунов? Как проходили собесы и тд... мне предстоит все это. какого уровня были твои знания во время собеседований? только видео Наиля? или еще читала Хорстманна? Шилдта? Что спрашивали по спрингу, кибернейту, sql, maven, git, tomcat?
...не знаю. Вот сижу смотрю про этот Spring и не понимаю всё равно нафига оно надо. Может дальше будет понятнее, но пока так. Т.е. мы делаем то тоже самое но в других местах, другими способами и менее очевидно и прозрачно, с помощью "магии", подключения лишних библиотек и прочего, но при этом я вообще не вижу в чём упрощение разработки, всё так же приходится прописывать, только иначе. Причем это иначе не сказать что проще, скорее наоборот. Может я тупой, а может как обычно "пользуемся потому что модно" как было уже не раз. История идет по кругу как говорится, вон сколько метаний вокруг работы с БД, JDBC, потом JDO который действительно удобный в некоторых реализациях, потом про него дружно забыли, потом ничёсе JPA! Потом опять про JDBC и что нам делать... А-а-а как бы есть уже инструменты. Нет, давайте заново изобретать JPA, а потом опять же заново изобретать JDO. В итоге куча разных реализаций одного и того же. Не знаю, странная фигня если честно, куча новых названий для одно и того же, куча механизмов для одного и того же. Почему аннотации Component нужно было делать если из этого Bean делается, не проще ли сразу назвать понятно. Почему названия сетеров преобразуются по одному шаблону, а остальное по другому? Зачем так делать? Это же криво и неудобно.
Вопрос по поводу @Autowired, в частности момента на 15:35. Я по невнимательности не поставил аннотацию на конструктор MusicPlayer, но тем не менее все работает и без нее. Почему так?
Начиная со Spring версии 4.3, если в вашем классе есть только один конструктор, можно не ставить аннотацию @Autowired на него и Spring будет по умолчанию внедрять зависимости через этот конструктор. Тем не менее я предпочитаю всегда ставить аннотацию @Autowired, так как это делает код более читабельным и понятным (некоторые люди могут не знать об этой "фишке", а если стоит аннотация @Autowired то все сразу понятно).
Спасибо, супер доступное объяснение, один момент только не совсем для меня понятен, для чего в конструкторе вы передаёте айдишник (this.id = 1) и почему внедряется не спрингом? Это на случай если будет несколько компьютеров? Тогда в каждом нужно будет самим передавать индивидуальное значение id?
Читал, что Спринг сам уже не рекомендует ставить аннотацию над переменными, а использовать ее над сеттерами. Ещё, когда ставим над конструктором, то мы добавляем лишнюю зависимость классу, а она не всегда бывает нужна!
Спасибо за столь подробные уроки! У меня вопрос: на 13:05 - спринг создает бин мьюзик плеера и внедряет зависимость через сеттер. Однако, у мьюзик плеера в конструкторе - обязательна передача объекта мьюзик, и пустого конструктора нет. Я ожидал ошибку, мол нет конструктора по-умолчанию, ан-нет. Можете прокомментировать эту ситуацию? Спасибо :)
Похоже, что спринг видя надобность в конструкторе бина определенного типа ищет этот бин у себя в контексте даже при отсутствии аннотации @Autowired над конструктором. Если в этом примере убрать @Autowired с сетттера, то все также будет прекрасно работать как и с ним, и переменная music не будет null. Что же до дефолтного конструктора, то при его наличии в этом примере отрабатывал бы он
Евгений Зозуля ✋🏼 извиняюсь за прошлый пост( да, при наличии дефолтного конструктора в данном примере отрабатывал бы этот дефолтный конструктор, а зависимость внедрялась бы чз сеттер, помеченный @Autowired.
Объясните пожалуйста такой вопрос. Когда мы внедряли зависимость через сеттер используя дедовский способ (xml) нам приходилось создавать пустой конструктор, или удалять свой для того что бы спринг мог создать объект с пустым полем, что бы потом у этого объекта вызвать сеттер. А здесь конструктор живёт как ни в чём не бывало. Мы знаем что при создании любого 1-го конструктора JVM убивает конструктор по умолчанию (поэтому мы и создавали пустой, как вариант). Внимание вопрос! Как спринг в этом случае создаёт объект у которого потом вызывает сеттер? Спасибо.
Заметил, что когда делаю внедрение зависимостей через конструктор без @Autowired, то тоже все работает. Значит здесь Спринг сам понимает какой бин куда внедрять?
Привет, спасибо за уроки. Подскажи пожалуйста , почему в последнем варианте с классом Computer не падает программа даже если удалить @Autowired над конструктором MusicPlayer? Заранее спасибо
Хорошие видео, очень доступно и понятно. Большое спасибо автору. Один только вопрос, почему вы не пользуетесь горячими клавишами в IDEA? (Ctrl + D - копирование строки, Shift + f6 - изменение названий)
Думаю ответ на столько прост, что о нем никто не задумывался - когда делается учебное видео, то должно быть все визуализировано. К примеру запускать можно тоже через shift+F10, но для наглядности делает это мышкой.
по поводу внедрения зависимости напрямую через поле. IDEA пишет мне: Field injection is not recommended. рекомендую вам загуглить эту ошибку. вы сможете понять, что принятие решения о том, какое внедрение зависимостей использовать, зависит не только от структуры проекта.
Наиль, мои знакомые интересовались, есть ли хорошие курсы по Java на английском на ютубе. Я им ответила, что лучшее, что нашла ваши курсы. Рассматриваете ли вы возможность хотя бы поместить субтитры на английском в своих видео-уроках?
На неделе попался канал и ваши уроки уже стали для меня как наркотик. Очень информативные и мотивирующие, спасибо огромное за них! С 9:00 вы ссылаетесь на уроки по рефлексии на своем канале, но ни в одном плейлисте на канале, ни с помощью поиска по ключевому слову найти не удалось. Где найти эти уроки по рефлексии?
Курс классный! Но пока вся эта возня с зависимостями выглядит как танцы с бубнами над вещами, которые можно было бы легко сделать обычными конструкторами. Посмотри что будет дальше
Здравствуйте, спасибо большое за видео, очень интересно смотреть Ваши уроки. Хотел вот что спросить: если я удаляю аннотацию @Autowired у конструктора класса Computer, у меня продолжает всё работать. Выходит, что данную аннотацию можно и не прописывать?
на счет Autowired - если ее не указывать, то всё будет работать точно так же (если два бина и указать Music music в конструкторе МузыкальногоПлеера, то компилятор выдаст ошибку: найдено два компонента, какой жеж выбрать?)
Обнаружил интересную особенность. Если конструктор MusicPlayer не пометить как @Autowired и создать экземпляр MusicPlayer через getBean, то в конструктор все же автоматически передается подходящий бин. Это такая скрытая особенность?
Хм.... в данном уроке всё работает и без @Autowired. Или в новом Спринге это стало не столь обязательным, или я чего-то не понял. Т.е. создаём все бини через компоненты и Спринг без аннотации прекрасно понимает какой бин надо подставить в конструктор.
Привет из 2023 года, итак, если до использования Spring в учебных проектах в обычной JAVA, создавали счетчик id через static переменную, то уверенно могу сказать, что про создании бинов через @Autowired такой счетчик работать не будет. Решение пока не нашёл, как найду - напишу
необходима ли аннотация @Autowired над конструктором? если ее не ставить все и так прекрасно работает. А вот сеттер без этой аннотации не срабатывает. не понятно
Видео крутое! Один только вопрос: при внедрении с помощью @Autowired полей всплывает рекомендация: "Field injection is not recommended" - и ниже указана непосредственно рекомендация Spring Team: "Always use constructor based dependency injection in your beans." Что скажете по этому поводу?
Так что слова из урока о том, что все 3 способа абсолютно равнозначны не совсем правильные. Лучше все-таки использовать внедрение с помощью конструктора.
@@alishevN Но еще есть общий коцептуальный вопрос: ведь если убрать @Autowired изо всех классов, программа все равно будет работать. Как тогда объяснить необходимость использования этой аннотации в Spring? Возможно, вопрос глупый, но у меня возник.
а как быть если у класса, например, RockMusic будет конструктор, который принимает как параметр String songName? можно ли туда сразу как-то запихнуть значение?
Не понял 2 момента: Как что спринг передает в в конструктор(если на нем не стоит @Autowired), если у нас нет пустого конструктора? И если вообще нет @Autowired,то он все равно создает бин и добавляет зависимость
Начиная со Spring версии 4.3, если в вашем классе есть только один конструктор, можно не ставить аннотацию @Autowired на него и Spring будет по умолчанию внедрять зависимости через этот конструктор. Тем не менее я предпочитаю всегда ставить аннотацию @Autowired, так как это делает код более читабельным и понятным (некоторые люди могут не знать об этой "фишке", а если стоит аннотация @Autowired то все сразу понятно).
Не очень понял на 9:15, смысл ставить аннотацию @Autowired для конструктора ClassicalMusic? если и без нее класс TestSpring запустится и вернет валидные данные в консоль. Погуглил и оказывается для констукторов аннотация @Autowired - не обязательна.
@Scope("prototype") дополнительно поставить выше или ниже @Component. Что интересно, когда кликаешь с зажатым ctrl на @Scope, можно почитать описание и там ни где не указаны какие вариант можно вписывать.
мне одному кажется, что создание полей classicmusic и rockmusic и инициализация их в конструкторе какой-то костыль???? разве нет способа подключить 2 бина к этому конструктору через интрефейс????
@@vladimirgaydamakin7155 можно в качестве аргумента в конструктор передать лист, тогда кол-во аргументов станет любым - хоть 1 или больше. @Autowired public MusicPlayer(List musicList) { this.musicList = musicList; } UPD: либо обойтись вообще без конструктора подрубив аннотацию сразу к полю @Autowired private List musicList;
Последний способ гораздо выигрышнее смотрится, т.к. он уменьшает количество кода. Хочется его конечно же применять. Но присутствует страх, что такой способ неполноценен.
Вопрос, про @Autowired: насколько законно, если я буду его использовать в боевых проектах, ведь щас принято через конструктор подключать зависимости: private final DataSource dataSource; public SomeClass(DataSource dataSource) { this.dataSource = dataSource; }?
короткий ответ: @Autowired нужно знать, но стараться не использовать, а делать все "ручками" через конструктор (если лень писАть много строк - lombok в помощь)
@@ms_shifu7047 lombok - штука прикольная, но не стоит злоупотреблять. Имхо, на ранней стадии изучения лучше без него, это так - "сахар" в коде. Чем опасен @Autowared? Тем, что спринг-контейнер без разбора возьмет первый попавшийся, а не тот, на который Вы рассчитывали бин. Пример? Spring Boot и, собственно, Spring будут материться какую зависимость внедрять. У Вас даже приложение не соберется при таком подходе. Имхо, @Autowired - зло, которое потом (при большом проекте) фиг разберешь
@@Bonik-cj2zu что вы имеете ввиду под "Чем опасен @Autowared? Тем, что спринг-контейнер без разбора возьмет первый попавшийся, а не тот, на который Вы рассчитывали бин." ? Знакомы с аннотацией @Qualifier? Почитайте, будет полезно.
ПОЛНЫЙ КУРС ПО SPRING: swiftbook.org/courses/438
Плейлист этого курса: ruclips.net/p/PLAma_mKffTOR5o0WNHnY0mTjKxnCgSXrZ
Telegram: t.me/alishev_g
А почему в некоторых видео вы говорите, что спрингу нужен конструктор без параметров(и действительно приложение не запускается). А здесь не пишите конструктор без параметров(и все работает). От чего это зависит? Я правильно понял, что если объект без объектов внутри, то нужен конструктор без параметров. Если объект с объектом внутри, то конструктор без параметров не нужен?
Твои видосы как зп, редко но радуют!
В русскоязычном сегменте очень не хватает таких видео. Но вообще бомбой было бы взять один хоть даже мини проект и сделать его по всем правилам от 0 до продакшена.
@@Beatsmusic777 letsCode, имеет что-то подобное
@@Дмитрий-ж5ю6х Смотрел уже у него тоже много полезного вот только большинство лекторов дают обзорно а было бы круто если взяли бы один небольшой но полноценный проект и допилилибы его до конца.
Сука. :'( как ножом по сердцу
Голос приятный, разобираешь всё по пунктам, затрагиваешь тонкости, всё объясняеться на примерах - смотреть одно удовольствие!
Спасибо!
Вот сидишь такой, начинаешь изучать Spring, все сложно и непонятно и тут появляется джин в лице автора и все оказывается легко и просто))
Очень интересная тема по Spring🔥🔥, и урок самый понятный, доступными словами. Можно еще урок по Spring AOP😭.
Огромное спасибо! Разложили всё по полкам! Продолжайте пожалуйста, у Вас хорошо получается! Не бросайте, очень интересно!
Какой же автор все таки красавчик, так четко все по полочкам по Спринг Кору. Для меня этот цикл лекций прояснил больше чем 3 и 5 издание Spring in Action вместе взятые.
Внедрение через поле является плохой практикой, т.к. потом столкнетесь с проблемой во время написания тестов. Лучше использовать внедрение через конструктор, если это возможно, иначе - через setter. А так хорошее видео, лайк ;)
Об этом даже говорит IDEA но кто смотрит на это :) Да и вообще @Autowired вовсе не обязателен. Еще момент про сканирование очень плохо раскрыт в реальном проекте лучше указывать как можно точнее пакеты которые нужно сканировать, это уменьшит время сканирования и поможет избегать конфликты.
Maksim Muruev
как это @Autowired не обязателен?????
@@manOfPlanetEarth Начиная со Spring версии 4.3, если в вашем классе есть только один конструктор, можно не ставить аннотацию @Autowired на него и Spring будет по умолчанию внедрять зависимости через этот конструктор.
Тем не менее я предпочитаю всегда ставить аннотацию @Autowired, так как это делает код более читабельным и понятным (некоторые люди могут не знать об этой "фишке", а если стоит аннотация @Autowired то все сразу понятно).
@@irynalysechko2462
Ира, спасибо за пояснение!
@@irynalysechko2462
у тебя видео про шпагат на канале. получилось сесть?
интересно, потому что сам потягиваюсь. но не для шпагата, а поскромней.
Чисто на удачу открыл твой канал, и тут видео 16 минут назад!!! Спасибо, как всегда интересно и информативно!
пожалуйста больше материала!!!! Вы очень крут!!!
Объясняешь очень хорошо. Даже ребенок поймет. Спасибо
Алишев, спасибо за уроки! Когда нахожу твой урок по интересующей меня теме, точно уверен, что все пойму. Очень доходчиво объясняешь!!!
Как раз по работе столкнулся со Spring. Из того что нашел - это самое лучшие объяснение. Спасибо. Жду продолжение. PS я автоматизатор.
Спасибо Вам огромное за ваш Труд! Очень содержательные лекции. Пожалуй, лучшее, что есть на русском про Spring!
Наиль, тебе спасибо передал Эмиль!
благодаря вам изучение spring идет куда быстрее) от души
Очень часто смотрю Ваши уроки, начинал с самого начала о джаве, сейчас уже устраиваюсь на работу. Большое Вам спасибо, всё очень круто, успехов в работе и крепкого здоровья!
Спасибо вам!
Ivaar , Да :)
привет. устроился? рассказываай все как есть)
что было сложно? какая обстановка на рынке? или еще не устроился? не стесняйся.
Привет, да, устроился, на рынке сейчас тяжело. Честно, сложного почти ничего не было, на джуна много не спрашивают, чего не знаешь - доучишь на испыталке, так что нужно пробовать. Больше подучить теорию перед собесом и не волноваться, говорить медленно и уверенно, особенно про полиморфизм и конечно примеры из жизни :)
@@romanihnatov5629
спасибо за ответ)
ты город не указал. москва/питер или др?
просто в первых двух всегда побольше вакансий для джунов. а в остальных городах очень мало вакансий для джунов всегда.
меня москва/питер интересуют)
Cамые лучшие уроки!
Очень толковые уроки, много практики. Спасибо.
у нас в Минске на курсах it -академии по java включают видео Алишева - вот это о многом говорит. Так круто подавать мало кто может!!!
Спасибо огромнейшее, слайды очень помогают, я к тому-же их скриню))
Огромное спасибо!
Спасибо за крутые видео курсы !!!))
Спасибо за такой интересный урок!
Благодарю вам огромное спасибо.
Отличные уроки!
Алишев я люблю тебя
Красава! Так ждал это видео!
Спасибо большое, супер.
Прям на ура зашел. Спс
Spring Framework. Урок 10: Аннотация @Autowired. Внедрение зависимостей (Dependency Injection).
Классные видеоуроки, спасибо!
Превосходный курс
Спасибо за уроки!
5 лет рботал Unity разработчиком, теперь вот решил переучиться на Java Enterprise и пытаюсь разобраться со Spring, надеюсь через несколько месяцев у меня все получится))
ну как успехи?
ну как успехи?
@@vazhmax2632 ушел в 1с
Спасибо большое.
Через Autowired самый простой и понятный способ
Наиль!!! Огромное спасибо!!! По твоим видео я начала учить джаву! А на этой неделе будет мой первый рабочий день в качестве джуна))) Кстати вопрос про аннотацию Autowired был на собесе!!! Спасибо огромное!!! Только не бросай канал, пожалуйста, он нам очень нужен!!!!
Уау! Круто) поздравляю 🥳
Ира, привет! Расскажи, пож-та, как продвигаются твои дела на работе? Москва же? На сколько собеседований пришлось сходить, каков спрос на джунов? Как проходили собесы и тд... мне предстоит все это.
какого уровня были твои знания во время собеседований? только видео Наиля? или еще читала Хорстманна? Шилдта? Что спрашивали по спрингу, кибернейту, sql, maven, git, tomcat?
Во, уже жара начинается, жалко еще норм качество не подъехало.
хорошая подача материала...
thankful
Супер!
лайк, посмотрю позже )
Спасибо
Копировать строчку можно просто нажатием Ctrl + d в Идее
Спасибо!
2:11 Если не находится ни одного бина - ошибка.
Если подходят несколько бинов - *Фатальная ошибка*
круто!
Почему аннотация "@Component" называется именно так, а не "@Bean"?
Спасибо. Доната не жаль)
...не знаю. Вот сижу смотрю про этот Spring и не понимаю всё равно нафига оно надо. Может дальше будет понятнее, но пока так. Т.е. мы делаем то тоже самое но в других местах, другими способами и менее очевидно и прозрачно, с помощью "магии", подключения лишних библиотек и прочего, но при этом я вообще не вижу в чём упрощение разработки, всё так же приходится прописывать, только иначе. Причем это иначе не сказать что проще, скорее наоборот. Может я тупой, а может как обычно "пользуемся потому что модно" как было уже не раз. История идет по кругу как говорится, вон сколько метаний вокруг работы с БД, JDBC, потом JDO который действительно удобный в некоторых реализациях, потом про него дружно забыли, потом ничёсе JPA! Потом опять про JDBC и что нам делать... А-а-а как бы есть уже инструменты. Нет, давайте заново изобретать JPA, а потом опять же заново изобретать JDO. В итоге куча разных реализаций одного и того же. Не знаю, странная фигня если честно, куча новых названий для одно и того же, куча механизмов для одного и того же. Почему аннотации Component нужно было делать если из этого Bean делается, не проще ли сразу назвать понятно. Почему названия сетеров преобразуются по одному шаблону, а остальное по другому? Зачем так делать? Это же криво и неудобно.
Почему без анотации @Autowired все равно код работал?
В XML всё было сконфигурировано
@@СашаНемо-з2ы Понял) Спасибо)
Вопрос по поводу @Autowired, в частности момента на 15:35. Я по невнимательности не поставил аннотацию на конструктор MusicPlayer, но тем не менее все работает и без нее. Почему так?
Начиная со Spring версии 4.3, если в вашем классе есть только один конструктор, можно не ставить аннотацию @Autowired на него и Spring будет по умолчанию внедрять зависимости через этот конструктор.
Тем не менее я предпочитаю всегда ставить аннотацию @Autowired, так как это делает код более читабельным и понятным (некоторые люди могут не знать об этой "фишке", а если стоит аннотация @Autowired то все сразу понятно).
@@alishevN Да, соглашусь, фича сомнительная. Спасибо большое за пояснение.
Спасибо, супер доступное объяснение, один момент только не совсем для меня понятен, для чего в конструкторе вы передаёте айдишник (this.id = 1) и почему внедряется не спрингом? Это на случай если будет несколько компьютеров? Тогда в каждом нужно будет самим передавать индивидуальное значение id?
Читал, что Спринг сам уже не рекомендует ставить аннотацию над переменными, а использовать ее над сеттерами. Ещё, когда ставим над конструктором, то мы добавляем лишнюю зависимость классу, а она не всегда бывает нужна!
Спасибо за столь подробные уроки! У меня вопрос: на 13:05 - спринг создает бин мьюзик плеера и внедряет зависимость через сеттер. Однако, у мьюзик плеера в конструкторе - обязательна передача объекта мьюзик, и пустого конструктора нет. Я ожидал ошибку, мол нет конструктора по-умолчанию, ан-нет. Можете прокомментировать эту ситуацию? Спасибо :)
Похоже, что спринг видя надобность в конструкторе бина определенного типа ищет этот бин у себя в контексте даже при отсутствии аннотации @Autowired над конструктором. Если в этом примере убрать @Autowired с сетттера, то все также будет прекрасно работать как и с ним, и переменная music не будет null. Что же до дефолтного конструктора, то при его наличии в этом примере отрабатывал бы он
Евгений Зозуля
✋🏼 извиняюсь за прошлый пост(
да, при наличии дефолтного конструктора в данном примере отрабатывал бы этот дефолтный конструктор, а зависимость внедрялась бы чз сеттер, помеченный @Autowired.
Объясните пожалуйста такой вопрос.
Когда мы внедряли зависимость через сеттер используя дедовский способ (xml) нам приходилось создавать пустой конструктор, или удалять свой для того что бы спринг мог создать объект с пустым полем, что бы потом у этого объекта вызвать сеттер.
А здесь конструктор живёт как ни в чём не бывало. Мы знаем что при создании любого 1-го конструктора JVM убивает конструктор по умолчанию (поэтому мы и создавали пустой, как вариант).
Внимание вопрос!
Как спринг в этом случае создаёт объект у которого потом вызывает сеттер?
Спасибо.
Заметил, что когда делаю внедрение зависимостей через конструктор без @Autowired, то тоже все работает. Значит здесь Спринг сам понимает какой бин куда внедрять?
Autowired по всей видимости не обязательно использовать над конструктором. Спринг сам добавляет эту зависимость без аннотации
Привет, спасибо за уроки. Подскажи пожалуйста , почему в последнем варианте с классом Computer не падает программа даже если удалить @Autowired над конструктором MusicPlayer? Заранее спасибо
начиная со Spring 4.0 аннотацию @Autowired можно не ставить на конструктор, если он единственный в классе.
Хорошие видео, очень доступно и понятно. Большое спасибо автору. Один только вопрос, почему вы не пользуетесь горячими клавишами в IDEA? (Ctrl + D - копирование строки, Shift + f6 - изменение названий)
Думаю ответ на столько прост, что о нем никто не задумывался - когда делается учебное видео, то должно быть все визуализировано. К примеру запускать можно тоже через shift+F10, но для наглядности делает это мышкой.
по поводу внедрения зависимости напрямую через поле. IDEA пишет мне: Field injection is not recommended. рекомендую вам загуглить эту ошибку. вы сможете понять, что принятие решения о том, какое внедрение зависимостей использовать, зависит не только от структуры проекта.
у тебя idea взломанная или купил подписку
Возникает проблема,что Spring не может найти bean с названием rockMusic , хотя кажется все также как у вас
Наиль, мои знакомые интересовались, есть ли хорошие курсы по Java на английском на ютубе. Я им ответила, что лучшее, что нашла ваши курсы. Рассматриваете ли вы возможность хотя бы поместить субтитры на английском в своих видео-уроках?
подумаю, спасибо)
На неделе попался канал и ваши уроки уже стали для меня как наркотик. Очень информативные и мотивирующие, спасибо огромное за них!
С 9:00 вы ссылаетесь на уроки по рефлексии на своем канале, но ни в одном плейлисте на канале, ни с помощью поиска по ключевому слову найти не удалось. Где найти эти уроки по рефлексии?
Уроки по рефлексии находятся в моем курсе "Продвинутая Java".
Ссылка: www.udemy.com/course/javarussia/?referralCode=A36A8387475CAFDC6776
Курс классный! Но пока вся эта возня с зависимостями выглядит как танцы с бубнами над вещами, которые можно было бы легко сделать обычными конструкторами. Посмотри что будет дальше
Может знаете где найти какие нибудь не сложные проекты для новичков, которые только что освоили ООП? Проекты где можно было бы работать в команде
Здравствуйте, спасибо большое за видео, очень интересно смотреть Ваши уроки. Хотел вот что спросить: если я удаляю аннотацию @Autowired у конструктора класса Computer, у меня продолжает всё работать. Выходит, что данную аннотацию можно и не прописывать?
+
Клас!
на счет Autowired - если ее не указывать, то всё будет работать точно так же (если два бина и указать Music music в конструкторе МузыкальногоПлеера, то компилятор выдаст ошибку: найдено два компонента, какой жеж выбрать?)
Обнаружил интересную особенность. Если конструктор MusicPlayer не пометить как @Autowired и создать экземпляр MusicPlayer через getBean, то в конструктор все же автоматически передается подходящий бин. Это такая скрытая особенность?
начиная со Spring 4.0 аннотацию @Autowired можно не ставить на конструктор, если он единственный в классе.
Супер. А подскажите сколько стоит платный курс и есть ли он вообще по Spring?
Планируешь ли платный урок по спрингу? Хотелось бы посмотреть, хорошо объясняешь
Пока выпускаю здесь.
Хм.... в данном уроке всё работает и без @Autowired. Или в новом Спринге это стало не столь обязательным, или я чего-то не понял.
Т.е. создаём все бини через компоненты и Спринг без аннотации прекрасно понимает какой бин надо подставить в конструктор.
почему у меня не работает System.out.println () вне метода
Привет из 2023 года, итак, если до использования Spring в учебных проектах в обычной JAVA, создавали счетчик id через static переменную, то уверенно могу сказать, что про создании бинов через @Autowired такой счетчик работать не будет. Решение пока не нашёл, как найду - напишу
необходима ли аннотация @Autowired над конструктором? если ее не ставить все и так прекрасно работает. А вот сеттер без этой аннотации не срабатывает. не понятно
Видео крутое!
Один только вопрос: при внедрении с помощью @Autowired полей всплывает рекомендация: "Field injection is not recommended" - и ниже указана непосредственно рекомендация Spring Team: "Always use constructor based dependency injection in your beans."
Что скажете по этому поводу?
Да, идея считает, что лучше внедрять через конструкторы.
Так что слова из урока о том, что все 3 способа абсолютно равнозначны не совсем правильные. Лучше все-таки использовать внедрение с помощью конструктора.
@@alishevN Спасибо за ответ!
@@alishevN Но еще есть общий коцептуальный вопрос: ведь если убрать @Autowired изо всех классов, программа все равно будет работать. Как тогда объяснить необходимость использования этой аннотации в Spring? Возможно, вопрос глупый, но у меня возник.
Я предпочитаю всегда ставить аннотацию @Autowired, так как это делает код более читабельным и понятным. Некоторые люди не ставят.
а как быть если у класса, например, RockMusic будет конструктор, который принимает как параметр String songName? можно ли туда сразу как-то запихнуть значение?
Теперь ждём Python!
скоро!
Вы очень хорошо рассказываете. Было бы круто, если бы у вас было бы видео про spring+hibernate
не совсем понятно использование @Autowired в public MusicPlayer(ClassicalMusic classicalMusic, RockMusic rockMusic) , тут же и так все явно указано
Вы упомянули что @Autowired приватного поля копает рефлексию, позже вы утверждаете что любой @Autowired одинаков в функциональности, так ли это?
если разница лишь в setAccessible, то прошу прощения, но ведь все равно разная реализация получается
А что если конструкторов два, один с @Awtowired другой без?
А идеа пишет предупреждение, что внедрение зависимостей через поля не рекомендуется. Почему так?
Да, идея считает, что лучше внедрять через конструкторы.
19:00 - почему не нужно вызывать метод toString у объекта computer в мейне?
это специальный метод
его джава сама вызывает чтобы получить представление объекта
Не показал, как передавать значения из стороннего файла при создании бинов. Можно ли это сделать через аннотации?
Урок 12
Если у вас эта ошибка Unsupported class file major version 59
Не понял 2 момента:
Как что спринг передает в в конструктор(если на нем не стоит @Autowired), если у нас нет пустого конструктора?
И если вообще нет @Autowired,то он все равно создает бин и добавляет зависимость
С какой-то версии Спринг в каких-то случаях может работать и без @Autowired
У меня спринг внедряет зависимости даже без аннотации Autowired, это нормально?
Попробовал удалить аннотацию Autowired, чтобы посмотреть, какая ошибка будет. Но никакой ошибки не было, idea скушала и такой код.
Начиная со Spring версии 4.3, если в вашем классе есть только один конструктор, можно не ставить аннотацию @Autowired на него и Spring будет по умолчанию внедрять зависимости через этот конструктор.
Тем не менее я предпочитаю всегда ставить аннотацию @Autowired, так как это делает код более читабельным и понятным (некоторые люди могут не знать об этой "фишке", а если стоит аннотация @Autowired то все сразу понятно).
@@alishevN Понял, большое спасибо за объяснение)
Не очень понял на 9:15, смысл ставить аннотацию @Autowired для конструктора ClassicalMusic? если и без нее класс TestSpring запустится и вернет валидные данные в консоль. Погуглил и оказывается для констукторов аннотация @Autowired - не обязательна.
херня какая-то. а для чего она? только для сеттеров? раздражает отсутствие четких правил. что запоминать-то?????
Если мне надо использовать несколько экземпляров класса, как мне сделать это с помощью аннотаций?
@Scope("prototype") дополнительно поставить выше или ниже @Component. Что интересно, когда кликаешь с зажатым ctrl на @Scope, можно почитать описание и там ни где не указаны какие вариант можно вписывать.
мне одному кажется, что создание полей classicmusic и rockmusic и инициализация их в конструкторе какой-то костыль????
разве нет способа подключить 2 бина к этому конструктору через интрефейс????
а если нам нужно только 1 музыку проиграть?? а аргумента обяззтаельно два...
хрень какая-то..
@@vladimirgaydamakin7155 можно в качестве аргумента в конструктор передать лист, тогда кол-во аргументов станет любым - хоть 1 или больше.
@Autowired
public MusicPlayer(List musicList) {
this.musicList = musicList;
}
UPD:
либо обойтись вообще без конструктора подрубив аннотацию сразу к полю
@Autowired
private List musicList;
Постоянно боюсь, что полоска видео дойдёт до конца и видео прервётся
У меня программа и без аннотации @Autowired запускается на отлично. Или эта аннотация в новых версии джава не актуальна ?
эту аннотацию можно опускать и Спринг по умолчанию внедрит зависимость, но делать этого не стоит
@@alishevN Спасибо
Актуально еще java в 2020? Ведь есть python, C#
Самые популярные языки января 2020, топ-3 (TIOBE Index):
1) Java
2) C
3) Python
Последний способ гораздо выигрышнее смотрится, т.к. он уменьшает количество кода. Хочется его конечно же применять. Но присутствует страх, что такой способ неполноценен.
можно массив сделать и все
Вопрос, про @Autowired: насколько законно, если я буду его использовать в боевых проектах, ведь щас принято через конструктор подключать зависимости:
private final DataSource dataSource;
public SomeClass(DataSource dataSource) {
this.dataSource = dataSource;
}?
Лучше делать так, как уже принято в проекте.
Если там уже используют внедрение через конструктор, то лучше придерживаться этого стиля.
короткий ответ: @Autowired нужно знать, но стараться не использовать, а делать все "ручками" через конструктор (если лень писАть много строк - lombok в помощь)
@@Bonik-cj2zu thank's, много слышал про него, но еще не пробовал.
@@ms_shifu7047 lombok - штука прикольная, но не стоит злоупотреблять. Имхо, на ранней стадии изучения лучше без него, это так - "сахар" в коде. Чем опасен @Autowared? Тем, что спринг-контейнер без разбора возьмет первый попавшийся, а не тот, на который Вы рассчитывали бин. Пример? Spring Boot и, собственно, Spring будут материться какую зависимость внедрять. У Вас даже приложение не соберется при таком подходе. Имхо, @Autowired - зло, которое потом (при большом проекте) фиг разберешь
@@Bonik-cj2zu что вы имеете ввиду под "Чем опасен @Autowared? Тем, что спринг-контейнер без разбора возьмет первый попавшийся, а не тот, на который Вы рассчитывали бин." ? Знакомы с аннотацией @Qualifier? Почитайте, будет полезно.