АОП в Spring Framework
HTML-код
- Опубликовано: 10 сен 2024
- Наряду с контейнером инверсии управления и внедрением зависимостей важной составляющей Spring Framework является реализация аспектно-ориентированного программирования (АОП), основная задача которого - внедрение сквозной логики в приложение. Под сквозной логикой понимается логика, применимая одновременно ко множеству компонентов, такая как управления транзакциями, доступом, журналирование и т.д.
В Spring Framework и других фреймворках из его экосистемы аспектно-ориентированное программирование используется для неявного добавления сквозной логики к пользовательским компонентам. Так, например, непосредственно в самом Spring Framework реализовано декларативное управление транзакциями с использованием аннотации @Transactional, а в Spring Security - контроль доступа с использованием аннотаций @PreAuthorize и @PostAuthorize.
00:01:30 Что такое аспектно-ориентированное программирование
00:04:07 Компоненты АОП
00:06:33 Виды связывания
00:11:06 Необходимые зависимости, проект и поддержка АОП
00:14:39 Аспект (Aspect)
00:16:00 Точки среза (Pointcut)
00:49:37 Советы (Advice)
#java #spring #springframework #aop #aspectj #aspectorientedprogramming
Мой сайт: alexkosarev.name/
Паблик в VK: public2...
Канал в Telegram: t.me/+TZCuO38v...
Стать доном: donut/s...
Донаты в Boosty: boosty.to/akos...
Донаты в Tinkoff: www.tinkoff.ru...
Отличное видео, освежил знания по АОП. Помню использовал его в своем пет проекте и настраивал через XML.
Тарантино вещает 😂🤙
Супер, Тарантино снова снял шедевр)
Очень круто, один из немногих настолько подробных роликов на ютубе по теме АОП
Спасибо за ролик, было бы крайне полезно разобрать управление транзакциями в Spring
Огромное тебе спасибо за такое классное обьяснение и ввод в тему Spring АОП.
Пожалуйста, продолжай свое дело! У тебя очень хорошо получается.
Спасибо! Максимально приятно слушать на столько детальные объяснения
Когда искал гайд по АОР через поиск этого видео мне не выдало. А вот в пекомендациях через неделю - чего нет...
Очередное видео, которое посмотрел с большим удовольствием. Краткость сестра таланта (с). Минимальный и достаточный набор для самостоятельного движения. Жаль что не было подобного видео, когда сам погружался в эту тему. И да, под капотом много странных эффектов. Применять нужно аккуратно и с проверкой.
Спасибо за труд!
Хочется поставить 10000 лайков) спасибо огромное за ролик, очень интересно!
Молодец, очень доходчиво разложил!
Шикарно, Спасибо Саша! AOP кстати используется для кастомизации аллюр отчетов. так что автотестерам тоже полезно)
Спасибо за видео!!
Спасибо, шикарное объяснение👀
Саша как реклама которая следит за мной, только сегодня на собеседовании плохо ответил про АОП и думал подучить нормально, а тут бац и ролик, значит суждено выучить)
на какой грейд собесились?
@@user-gw2xs4zm4r на джуна
Лучший по обучению на java!
Смотрю тебя, для подготовки на первое собеседование
Как собеседования прошли?)
@@correctraccoon1262 на ура. Его знания помогли мне обрести уверенность в базовом понимании авторизации
Какой позитив. Браво!!!
Охрененные видео 🔥🔥🔥🔥🔥
Обожаю твои видео!
Это кайф, спасибо большое!
Хорошее видео, спасибо!
Пушка. Спасибо за материал)
спасибо!
лайк, коммент, некст!
Как в случаем с видео про @Transactional тут также освещается очень редкая (в плане обучающих материалов), но популярная на собсесах и в жизни тема. Снова на высоте, полный восторг. Спасибо за проделанную работу! P.S. будет ли видео про batch или про брокеры сообщений? (какие-нибудь интересные кейсы с кафкой/рэбитом)
Про очереди сообщений видео будут, да
Можно ещё как в дополнение кроме 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 раза пересмотрел видео и не нашел ответа, только указание параметров типы которых отмечены аннотацией или просто здесь это не рассматривалось?