Тайм-коды: 1:30 - введение, что такое аор и для чего оно существует? 2:31 - пример кода с дублирующимся кодом, где можно применить аор 4:11 - теория о компонентах аор 11:05 - зависимости, как подключить возможность использовать аор в спринге 12:07 - подробное описание приложения, где будем тестить аор 13:40 - создание конфига для аор 14:42 - создание класса-аспекта для дальнейшего создания советов(advices) и точек среза(pointcut) нем 16:00 - создаем advice и pointcut 19:29 - подробнее о pointcut -> указатель within 22:08 - несколько аннотаций в указателе within 23:48 - указатель execution 27:12 - еще больше об указателе execution - возможность указать аннотации для любой части сигнатуры метода+исключения+целевой класс 32:52 - указатель this 35:46 - указатель target 37:43 - указатель args 39:40 - указатель @target 42:05 - указатель @args 43:25 - указатель @within 45:56 - указатель bean 46:48 - использование отрицания, объединение нескольких правил, объединение правил в группы в pointcut 49:37 - начало advice -> аннотация для совета Before 50:35 - аннотация для совета After 51:58 - аннотации для совета AfterReturning и AfterThrowing 53:52 - получение доступа к результату/исключению после срабатывания советов AfterReturning и AfterThrowing 56:33 - аннотация для совета Around(неверный синтаксис) 58:58 - верный синтаксис работы аннотации Around(использование ProceedingJoinPoint) 1:00:40 - порядок выполнения советов с разными аннотациями 1:01:40 - использование JoinPoint и его методов в аннотациях для получение доп. инфы о выполняемой логике 1:03:03 - модификация аргументов в методах с аннотацией Around 1:05:17 - начало введения (Introduction) 1:06:33 - статическая переменная + аннотация DeclareParents 1:09:23 - уточнение, что модификация(добавления др. поведения/интерфейсов) через введения возможна только для proxy класса, но не для целевого класса 1:11:14 - заключение
Очередное видео, которое посмотрел с большим удовольствием. Краткость сестра таланта (с). Минимальный и достаточный набор для самостоятельного движения. Жаль что не было подобного видео, когда сам погружался в эту тему. И да, под капотом много странных эффектов. Применять нужно аккуратно и с проверкой.
Саша как реклама которая следит за мной, только сегодня на собеседовании плохо ответил про АОП и думал подучить нормально, а тут бац и ролик, значит суждено выучить)
Как в случаем с видео про @Transactional тут также освещается очень редкая (в плане обучающих материалов), но популярная на собсесах и в жизни тема. Снова на высоте, полный восторг. Спасибо за проделанную работу! P.S. будет ли видео про batch или про брокеры сообщений? (какие-нибудь интересные кейсы с кафкой/рэбитом)
Можно ещё как в дополнение кроме Spring AOP ещё и про AspectJ рассказать по-подробней. Он расширенный ф-л предоставляет за счёт использование внутри либы ASM и использования своего языка, не аннотированный spring стиль. К примеру, часто бывает нужно чтобы аннотации триггерились и на методах, которые и когда вызываются внутри другого метода, не смотря на то что они оба публичны (тут проблема проксирования от Spring-а встаёт) или проблема работы с не публичными метода в Spring AOP
Возможно когда-нибудь расскажу и про AspectJ, но планов и так очень много, а тема AspectJ мне кажется не очень востребованной. Хотя признаю, что AspectJ - невероятно мощный и полезный инструмент. >> не аннотированный spring стиль А это и не Spring-стиль, скорее даже наоборот - аннотации появились в AspectJ 5 аж в 2003-2004 году) >> аннотации триггерились и на методах, которые и когда вызываются внутри другого метода Это проблема динамического связывания в целом, так как перехватывает вызовы прокси-объект, о существовании которого целевой объект не знает. Целевой объект обращается к самому себе напрямую, минуя прокси. Чтобы перехватывать внутренние вызовы, нужно нагородить костылей с внедрением ссылки на прокси в целевой объект, либо внедрить контекст Spring и обращаться к "своим" методам через прокси, получаемого из контекста. Либо использовать другие виды связывания.
После уточнения от @enjoyit8499 понял о чём речь. На самом деле в Sprung Framework и его экосистеме много чего основано на АОП и динамическом проксировании. И @Transactional, и @Cachable, и @PreAuthorize/@PostAuthorize и т.д.
А можно ли создать Pointcut для того чтобы фильтровать методы в которых есть именно параметры, аннотированные какой-нибудь аннотацией, к примеру @RequestBody?
@@shurik_codes 2 раза пересмотрел видео и не нашел ответа, только указание параметров типы которых отмечены аннотацией или просто здесь это не рассматривалось?
Тайм-коды:
1:30 - введение, что такое аор и для чего оно существует?
2:31 - пример кода с дублирующимся кодом, где можно применить аор
4:11 - теория о компонентах аор
11:05 - зависимости, как подключить возможность использовать аор в спринге
12:07 - подробное описание приложения, где будем тестить аор
13:40 - создание конфига для аор
14:42 - создание класса-аспекта для дальнейшего создания советов(advices) и точек среза(pointcut) нем
16:00 - создаем advice и pointcut
19:29 - подробнее о pointcut -> указатель within
22:08 - несколько аннотаций в указателе within
23:48 - указатель execution
27:12 - еще больше об указателе execution - возможность указать аннотации для любой части сигнатуры метода+исключения+целевой класс
32:52 - указатель this
35:46 - указатель target
37:43 - указатель args
39:40 - указатель @target
42:05 - указатель @args
43:25 - указатель @within
45:56 - указатель bean
46:48 - использование отрицания, объединение нескольких правил, объединение правил в группы в pointcut
49:37 - начало advice -> аннотация для совета Before
50:35 - аннотация для совета After
51:58 - аннотации для совета AfterReturning и AfterThrowing
53:52 - получение доступа к результату/исключению после срабатывания советов AfterReturning и AfterThrowing
56:33 - аннотация для совета Around(неверный синтаксис)
58:58 - верный синтаксис работы аннотации Around(использование ProceedingJoinPoint)
1:00:40 - порядок выполнения советов с разными аннотациями
1:01:40 - использование JoinPoint и его методов в аннотациях для получение доп. инфы о выполняемой логике
1:03:03 - модификация аргументов в методах с аннотацией Around
1:05:17 - начало введения (Introduction)
1:06:33 - статическая переменная + аннотация DeclareParents
1:09:23 - уточнение, что модификация(добавления др. поведения/интерфейсов) через введения возможна только для proxy класса, но не для целевого класса
1:11:14 - заключение
Отличное видео, освежил знания по АОП. Помню использовал его в своем пет проекте и настраивал через XML.
Супер, Тарантино снова снял шедевр)
какие же у вас шикарные видео, работаю на большом проекте, даже не видел АОП, сейчас стал больше разбираться. Спасибо большое.
Спасибо за ролик, было бы крайне полезно разобрать управление транзакциями в Spring
Тарантино вещает 😂🤙
Очередное видео, которое посмотрел с большим удовольствием. Краткость сестра таланта (с). Минимальный и достаточный набор для самостоятельного движения. Жаль что не было подобного видео, когда сам погружался в эту тему. И да, под капотом много странных эффектов. Применять нужно аккуратно и с проверкой.
Хочется поставить 10000 лайков) спасибо огромное за ролик, очень интересно!
Шикарно, Спасибо Саша! AOP кстати используется для кастомизации аллюр отчетов. так что автотестерам тоже полезно)
Спасибо! Максимально приятно слушать на столько детальные объяснения
Огромное тебе спасибо за такое классное обьяснение и ввод в тему Spring АОП.
Пожалуйста, продолжай свое дело! У тебя очень хорошо получается.
Спасибо, шикарное объяснение👀
Молодец, очень доходчиво разложил!
Лучший по обучению на java!
Смотрю тебя, для подготовки на первое собеседование
Как собеседования прошли?)
@@correctraccoon1262 на ура. Его знания помогли мне обрести уверенность в базовом понимании авторизации
Хорошее видео, спасибо!
Когда искал гайд по АОР через поиск этого видео мне не выдало. А вот в пекомендациях через неделю - чего нет...
Охрененные видео 🔥🔥🔥🔥🔥
Это кайф, спасибо большое!
Спасибо за труд!
Какой позитив. Браво!!!
Пушка. Спасибо за материал)
Спасибо за видео!!
Обожаю твои видео!
Саша как реклама которая следит за мной, только сегодня на собеседовании плохо ответил про АОП и думал подучить нормально, а тут бац и ролик, значит суждено выучить)
на какой грейд собесились?
@@ВиталийГудзь-г4ъ на джуна
Как в случаем с видео про @Transactional тут также освещается очень редкая (в плане обучающих материалов), но популярная на собсесах и в жизни тема. Снова на высоте, полный восторг. Спасибо за проделанную работу! P.S. будет ли видео про batch или про брокеры сообщений? (какие-нибудь интересные кейсы с кафкой/рэбитом)
Про очереди сообщений видео будут, да
мы любим большые ролики, нам нужны 12ти часовые ролики
спасибо!
Можно ещё как в дополнение кроме Spring AOP ещё и про AspectJ рассказать по-подробней. Он расширенный ф-л предоставляет за счёт использование внутри либы ASM и использования своего языка, не аннотированный spring стиль.
К примеру, часто бывает нужно чтобы аннотации триггерились и на методах, которые и когда вызываются внутри другого метода, не смотря на то что они оба публичны (тут проблема проксирования от Spring-а встаёт) или проблема работы с не публичными метода в Spring AOP
Возможно когда-нибудь расскажу и про AspectJ, но планов и так очень много, а тема AspectJ мне кажется не очень востребованной. Хотя признаю, что AspectJ - невероятно мощный и полезный инструмент.
>> не аннотированный spring стиль
А это и не Spring-стиль, скорее даже наоборот - аннотации появились в AspectJ 5 аж в 2003-2004 году)
>> аннотации триггерились и на методах, которые и когда вызываются внутри другого метода
Это проблема динамического связывания в целом, так как перехватывает вызовы прокси-объект, о существовании которого целевой объект не знает. Целевой объект обращается к самому себе напрямую, минуя прокси. Чтобы перехватывать внутренние вызовы, нужно нагородить костылей с внедрением ссылки на прокси в целевой объект, либо внедрить контекст Spring и обращаться к "своим" методам через прокси, получаемого из контекста. Либо использовать другие виды связывания.
Емае, какой же качественный материал о АОП. Готов поспорить, за маской Саши скрывается Sam Brannen)
лайк, коммент, некст!
Разработка == метафоры + (само)ирония
Примеси в других ЯП реализуются подобным образом на уровне языка?
Вполне возможно, что да, но на этапе компиляции
А почему классы в твоих проектах либо абстрактные или финальные?
А при использовании каких ещё аннотаций из часто использованных используется прокси? Кроме Configuration
Не понял сути вопроса)
После уточнения от @enjoyit8499 понял о чём речь. На самом деле в Sprung Framework и его экосистеме много чего основано на АОП и динамическом проксировании. И @Transactional, и @Cachable, и @PreAuthorize/@PostAuthorize и т.д.
Можно ли ссылочку на ваш гитхаб? Как начинающему разрабу, очень хочется почитать чужой код. Спасибо!
github.com/alex-kosarev но там код красотой не блещет)
@@shurik_codes огромное вам спасибо!)
Видео понравилось, а есть ссылка на код из видео?
К сожалению нет
Всё-таки лучше не пытаться переводить какие-то названия методов или ещё чего
Возможно
А можно ли создать Pointcut для того чтобы фильтровать методы в которых есть именно параметры, аннотированные какой-нибудь аннотацией, к примеру @RequestBody?
Конечно можно
@@shurik_codes 2 раза пересмотрел видео и не нашел ответа, только указание параметров типы которых отмечены аннотацией или просто здесь это не рассматривалось?