[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-spring-chto-takoe-spring-aop-kakie-osnovnye-ponyatiya-v-aop":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},617,"chto-takoe-spring-aop-kakie-osnovnye-ponyatiya-v-aop",14,"spring","Spring","🌱","Что такое Spring AOP? Какие основные понятия в AOP?","AOP (Aspect-Oriented Programming) -- парадигма программирования, позволяющая выделять сквозную функциональность (cross-cutting concerns) в отдельные модули. Сквозная функциональность -- это логика, пронизывающая множество модулей: логирование, транзакции, безопасность, кэширование.\n\n### Основные понятия\n\n| Понятие | Описание |\n|---------|----------|\n| Aspect (Аспект) | Модуль сквозной функциональности (класс с `@Aspect`) |\n| Advice (Совет) | Действие, выполняемое аспектом в определённой точке |\n| Join Point (Точка соединения) | Место в коде, где может быть применён advice (в Spring -- всегда вызов метода) |\n| Pointcut (Срез) | Выражение, определяющее, к каким join point применяется advice |\n| Target object | Объект, к которому применяется аспект |\n| Proxy | Объект-обёртка для перехвата вызовов |\n| Weaving | Процесс связывания аспектов с объектами (в Spring -- runtime через прокси) |\n\n### Пример аспекта\n\n```java\n@Aspect\n@Component\npublic class LoggingAspect {\n\n    @Pointcut(\"execution(* com.example.service.*.*(..))\")\n    public void serviceMethods() {}\n\n    @Before(\"serviceMethods()\")\n    public void logBefore(JoinPoint joinPoint) {\n        String methodName = joinPoint.getSignature().getName();\n        System.out.println(\"Вызов метода: \" + methodName);\n    }\n}\n```\n\n### Синтаксис Pointcut\n\n```java\n@Pointcut(\"execution(* com.example.service.*.*(..))\")  \u002F\u002F все методы в пакете\n@Pointcut(\"@annotation(com.example.Loggable)\")          \u002F\u002F с определённой аннотацией\n@Pointcut(\"within(@org.springframework.stereotype.Service *)\") \u002F\u002F все @Service\n@Pointcut(\"bean(userService)\")                           \u002F\u002F конкретный бин\n```\n\n### Как работает AOP в Spring\n\nSpring AOP основан на прокси-объектах:\n- JDK Dynamic Proxy -- если бин реализует интерфейс\n- CGLIB Proxy -- если бин не реализует интерфейс (создаётся подкласс)\n\n### Self-invocation -- главный подводный камень\n\n```java\n@Service\npublic class MyService {\n    @Loggable\n    public void methodA() { }\n\n    public void methodB() {\n        this.methodA(); \u002F\u002F AOP НЕ сработает -- вызов идёт напрямую, минуя прокси\n    }\n}\n```\n\n> **На собеседовании:** ключевые моменты -- прокси-модель и проблема self-invocation. Частая ошибка -- не знать, что AOP в Spring работает только на уровне прокси и не перехватывает внутренние вызовы (`this.method()`).","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Что такое Spring AOP? Какие основные понятия в AOP? — Gymterview","AOP (Aspect-Oriented Programming) -- парадигма программирования, позволяющая выделять сквозную функциональность (cross-cutting concerns) в отдельные модули. Скв","AOP (Aspect-Oriented Programming) -- парадигма программирования, позволяющая выделять сквозную функциональность (cross-c",[7,13],"AOP (Aspect-Oriented Programming) -- парадигма программирования, позволяющая выделять сквозную функциональность (cross-cutting concerns) в отдельные модули. Сквозная функциональность -- это логика, пронизывающая множество модулей: логирование, транзакции, безопасность, кэширование.",true]