Весной в АОП есть {Advisor, Advice, Pointcut, Joinpoint}
Как вы знаете, основная цель aop - отделить сквозную логику (Aspect) от кода приложения, чтобы реализовать это в Spring, которую мы используем (Advice / Advisor)
Pointcut используется для фильтрации того места, где мы хотим точно применить этот совет, например, «все методы начинаются со вставки», поэтому другие методы будут исключены, поэтому у нас в интерфейсе Pointcut есть {ClassFilter и MethodMatcher}
Итак, Advice - это реализация сквозной логики, а Advisor - это совет плюс PointCut, если вы используете только совет, Spring сопоставит его с советником и установит pointcut в ИСТИНА, что означает, что ничего не блокирует. Вот почему, когда вы используете только совет, он применяется ко всем методам целевого класса, потому что вы их не фильтровали.
Но Joinpoint - это место в программе, вы можете думать об этом как об отражении, когда вы обращаетесь к объекту Class, а затем вы можете получить объект Method, затем вы можете вызвать любой метод в этом классе, и то, как работает компилятор, если вы думаете, что вы можете себе представить точку соединения.
Точка соединения может быть с полем, конструктором или методом, но в Spring у нас есть точка соединения только с методами, поэтому в Spring у нас есть типы точки соединения (до, после, бросания, вокруг), все они относятся к местоположениям в классе.
Как я уже упоминал, у вас может быть совет без pointcut (без фильтра), тогда он будет применяться ко всем методам, или у вас может быть советник, который будет [advice + pointcut], который будет применяться к определенным методам, но у вас не может быть совета без точка соединения, такая как pointcut, вы должны указать ее, и поэтому типы рекомендаций в Spring точно такие же, как и точки соединения, поэтому, когда вы выбираете совет, вы неявно выбираете, какая точка соединения.
Подводя итог, совет - это логика реализации вашего аспекта целевого класса, этот совет должен иметь точку соединения, как перед вызовом, после вызова, после выброса или вокруг вызова, тогда вы можете отфильтровать, где именно вы хотите применить его, используя pointcut to отфильтровать методы или без pointcut (без фильтра), чтобы он применялся ко всем методам класса.