AOP навесні має {Advisor, Advice, Pointcut, Joinpoint}
Як ви знаєте, основною метою aop є відокремлення наскрізної логіки (Aspect) від коду програми, для реалізації цього навесні ми використовуємо (Advice / Advisor)
Pointcut використовується для фільтрації, де ми хочемо точно застосувати цю пораду, наприклад, "усі методи починаються зі вставки", тому інші методи будуть виключені, тому в інтерфейсі Pointcut {ClassFilter and MethodMatcher}
Отже, «Порада» - це наскрізна реалізація логіки, а «Радник» - це порада плюс PointCut, якщо ви користуєтесь лише порадою, весна зв’яже її з радником і зробить точку ІСТИНОЮ, що означає нічого не блокувати. Ось чому, коли ви використовуєте лише поради, це застосовується до всіх методів цільового класу, оскільки ви їх не фільтрували.
Але Joinpoint - це місце в програмі, ви можете думати про це як про відображення при доступі до об'єкта Class, а потім ви можете отримати об'єкт Method, тоді ви можете викликати будь-який метод у цьому класі, і ось як працює компілятор, якщо ви думаєте, що це ви можете собі уявити Joinpoint.
Точка об'єднання може бути з полем, конструктором або методом, але навесні ми маємо точку об'єднання лише з методами, тому навесні ми маємо типи Joinpoint (до, після, кидки, навколо), всі вони посилаються на місця в класі.
Як я вже згадував, ви можете отримати пораду без pointcut (без фільтра), тоді вона буде застосована до всіх методів, або ви можете мати консультанта, який є [консультація + pointcut], який застосовуватиметься до конкретних методів, але ви не можете отримати поради без joinpoint, як pointcut, ви повинні вказати його, і тому типи рекомендацій навесні - це точно ті самі типи, що і joinpoint, тому, вибираючи пораду, ви неявно вибираєте, яку точку з'єднання.
Підсумовуючи, порада - це логіка реалізації вашого аспекту для цільового класу; ця порада повинна мати точку об’єднання, як до виклику, після виклику, після викидання або навколо виклику, тоді ви можете відфільтрувати, де саме ви хочете застосувати це, використовуючи pointcut для відфільтруйте методи або не використовуйте pointcut (без фільтра), щоб він застосовувався до всіх методів класу.