Что такое AOP? Как это используется в Spring?



АОР - аспектно-ориентированное программирование
, парадигма программирования, призванное решить те задачи для которого ООП кажется избыточным. В основе идеи лежит выделение сквозной функциональности. Грубо говоря - мы выносим наш функционал, не относящийся к бизнес логике в отдельное место и даем ему набор правил когда и с кем работать. Сумбурно? Пример: мы не можем писать код без логов. Но логи - это не часть бизнес логики, это вспомогательный функционал. Мы можем описать всю логику логов в отдельном классе и затем каждый раз инициализировать этот класс для выведения лога или же мы можем создать отдельный класс(аспект) и навесить набор правил когда и где использовать этот код. Имеем класс Service, метод method() внутри и аспект LogAspect. Используя аннотации мы можем указать методам внутри LogAspect что они должны быть вызваны перед, либо после вызова Service.method(). Так же мы можем указать выполнение после возврата результата либо после ошибки.



Spring использует АОР, например, при проверке security при доступе на тот или иной эндпоинт.