AOP wiosną ma {Advisor, Advice, Pointcut, Joinpoint}
Jak wiecie, głównym celem aop jest oddzielenie logiki przekrojowych problemów (Aspekt) od kodu aplikacji, aby wdrożyć to wiosną, używamy (Advice / Advisor)
Pointcut jest używany do filtrowania tam, gdzie chcemy dokładnie zastosować tę radę, na przykład „wszystkie metody zaczynają się od wstawienia”, więc inne metody zostaną wykluczone, dlatego w interfejsie Pointcut mamy {ClassFilter i MethodMatcher}
Tak więc Porada jest implementacją logiki przekrojowej, a Doradca to rada plus PointCut, jeśli używasz tylko porad, sprężyna mapuje ją do doradcy i sprawi, że punkt przecięcia będzie PRAWDA, co oznacza, że niczego nie blokuj. Dlatego gdy używasz tylko rady, jest ona stosowana do wszystkich metod klasy docelowej, ponieważ ich nie filtrowałeś.
Ale Joinpoint jest lokalizacją w programie, możesz myśleć o tym jak o odbiciu, kiedy uzyskujesz dostęp do obiektu Class, a następnie możesz uzyskać obiekt Method, następnie możesz wywołać dowolną metodę w tej klasie i tak działa kompilator, jeśli myślisz, że to możesz sobie wyobrazić Joinpoint.
Joinpoint może być z polem, konstruktorem lub metodą, ale w Spring mamy joinpoint tylko z metodami, dlatego w Spring mamy typy Joinpoint (Before, After, Throws, Around), wszystkie odnoszą się do lokalizacji w klasie.
Jak wspomniałem, możesz mieć radę bez punktowania (bez filtra), wtedy będzie ona stosowana do wszystkich metod lub możesz mieć doradcę, którym jest [rada + punkt], który będzie stosowany do określonych metod, ale nie możesz mieć rady bez joinpoint jak pointcut, musisz je określić i dlatego typy porad na wiosnę są dokładnie takie same jak joinpoint, więc kiedy wybierasz poradę, niejawnie wybierasz, który punkt złączenia.
Podsumowując, rada jest logiką implementacji twojego aspektu do klasy docelowej, ta rada powinna mieć punkt sprzężenia, taki jak przed wywołaniem, po wywołaniu, po wyrzuceniu lub wokół wywołania, wtedy możesz filtrować, gdzie dokładnie chcesz go zastosować za pomocą pointcut do filtruj metody lub bez punktu cięcia (bez filtra), więc zostanie zastosowany do wszystkich metod klasy.