W jednym z moich artykułów pisałem już o Spring AOP i było to wprowadzenie do tematu programowania aspektowego w Springu. Teraz przyszedł czas na implementacje aspektów w Springu. W kolejnym odcinku na moim kanale pokazuję jak zaimplementować najczęściej występujące aspekty.
Programowanie aspektowe (Aspect Oriented Programming) jest paradygmat programowania, który ma na celu zwiększenie modularności kodu. Dzieje się to poprzez dodawanie specjalnych porad (advice), które pozwalają na dodanie nowej funkcjonalności, nie zmieniając istniejącego kodu. Natomiast sam aspekt to klasa, w której mamy zdefiniowane punkty przecięcia (pointcut) i porady (advice).
Najważniejszą zaletą programowania aspektowego jest to, że aspekty dodajemy z boku kodu właściwego naszej aplikacji. Nie musimy przy tym zmieniać żadnego istniejącego kodu naszej aplikacji. Pozwala to w dosyć dowolny sposób wpiąć nowy kod do istniejącej aplikacji w bardzo wielu miejscach bez konieczności refaktoryzacji (oszczędzamy czas, który stracilibyśmy na refaktoryzację).
Pamiętaj, że aspektów nie należy nadużywać, ponieważ może prowadzić to do sytuacji, w które kod biznesowy naszej aplikacji, zamiast znaleźć się w jednym miejscu, zostanie porozrzucany w różnych aspektach (w różnych komponentach). Aspekty powinny być używane do wprowadzania dodatkowych funkcjonalności do naszego kodu, a nie do realizacji podstawowych zadań (czyli implementacji kodu biznesowego)
W tym odcinku zaczynam od omówienia podstawowych założeń programowania aspektowego. Po czym przechodzę do omówienia przypadków, w których można zastosować aspekty. A główną część filmu poświęcam na implementację 3 różnych aspektów.
Aspekty, które implementuje to:
- aspekt logujący przed i po wywołaniu każdej metody publiczne (before i after)
- aspekt mierzący czas wywołań metod kontrolerów (around)
- aspekt dodatkowego uwierzytelnienia uruchamiany przy pomocy własnej adnotacji
W tej części znajdziesz:
- 00:00 Wstęp
- 00:18 Po co potrzebne są aspekty?
- 02:39 W jakich sytuacjach stosować aspekty?
- 06:30 Implementacja aspektu logującego (Before, After)
- 08:14 Definiowanie punktu przecięcia (Pointcut)
- 11:07 Implementacja Advice (Before, After)
- 15:03 Implementacja aspektu mierzącego czas wywołania metod (Around)
- 20:54 Implementacja aspektu z dodatkowy uwierzytelnieniem (własne adnotacja)
- 21:14 Dodaję własną adnotację
- 22:34 Dodajemy aspekt dla dodatkowej autoryzacja (Before)
- 23:33 Jak podłączyć adnotację do aspektu (Dodajemy Pointcut dla adnotacji)
- 24:17 Jak przekazać dane autoryzacyjne do aspektu?
- 33:55 Włącznie komunikatów błędów w Spring Boot
Powiązane artykuły:
Kurs Spring Boot #08 – Spring Cache:
https://www.youtube.com/watch?v=lWv3uBLO2LU
Dokumentacja Spring Aop:
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-pointcuts-examples
Github:
https://github.com/matdabrowski/youtube/tree/main/SpringAop
Mala uwaga, napisales „Natomiast sam aspekt to klasa…”, a w dokumentacji jest informacja, ze na aspekt moze skladac sie wiele klas „Aspect: A modularization of a concern that cuts across multiple classes.” (z https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-introduction-defn)
Musze przy tym przyznac, ze uzyte „modularization of a concern” nie tlumaczy sie latwo na polski.
komentarz do komentarza 😀 Nie „sklada sie z wielu klas”, ale przecina (obejmuje?) wiele klas