Przejd藕 do tre艣ci
Spring i Aspekty Logo

Aspekty i Spring 馃憟

Spring AOP to nic trudnego je偶eli mamy kawa艂ek fundamentalej wiedzy. Rozbieraj膮c na czynniki pierwsze Aspekty i Springa jeste艣my lepiej w stanie poj膮膰 i zrozumie膰 o co tam chodzi.

W dzisiejszym artykule:


Aspekty i Spring

Programowanie aspektowe (AOP) uzupe艂nia programowanie obiektowe (OOP), dostarczaj膮c innego sposobu my艣lenia o strukturze programu. Kluczow膮 jednostk膮 modularno艣ci programowania obiektowego jest klasa, podczas gdy w AOP jednostk膮 modularno艣ci jest aspekt. Aspekty umo偶liwiaj膮 modularyzacj臋 zagadnie艅 (takich jak zarz膮dzanie transakcjami), kt贸re dotycz膮 wielu typ贸w i obiekt贸w.

AOP jest paradygmatem programowania, kt贸ry ma na celu zwi臋kszenie modularno艣ci. Czyni to poprzez dodawanie dodatkowych zachowa艅 do istniej膮cego kodu bez modyfikowania samego kodu. Zamiast tego, mo偶emy zadeklarowa膰 nowy kod i nowe zachowanie osobno.

Jednym z kluczowych komponent贸w Springa jest framework AOP. Podczas gdy kontener Spring IoC nie zale偶y od AOP (co oznacza, 偶e nie musisz u偶ywa膰 AOP, je艣li nie chcesz), AOP uzupe艂nia Spring IoC, aby zapewni膰 wydajne rozwi膮zania. AOP w Springu jest u偶ywant m.in. do:

  • Dostarczania deklaratywnych us艂ug – najwa偶niejsz膮 tak膮 us艂ug膮 jest zarz膮dzanie transakcjami.
  • Pozwala u偶ytkownikom implementowa膰 niestandardowe aspekty, uzupe艂niaj膮c ich u偶ycie OOP o AOP.

Koncept Aspekt贸w

Aby lepiej zrozumie膰 dzia艂anie i ods艂oni膰 magi臋 aspekt贸w, trzeba si臋 zapozna膰 z tym jak ten mechanizm dzia艂a. Sp贸jrz na obrazek i przejd藕 do opisu definicji, aby lepiej pozna膰 konept aspekt贸w.

JoinPoint

Joinpoint jest punktem podczas wykonywania programu, takim jak wykonanie metody lub obs艂uga wyj膮tku. W Spring AOP, JoinPoint zawsze reprezentuje wykonanie metody.

Pointcut

Poincut jest predykatem, kt贸ry pomaga dopasowa膰 porad臋 (Advice), kt贸ra ma by膰 zastosowana przez Aspekt w konkretnym JoinPoincie. Cz臋sto kojarzymy Advice z Pointcutem i jest ona uruchamiana w dowolnym JoinPoincie dopasowanym przez ten Poincut.

Advice

Advice jest akcj膮 podejmowan膮 przez aspekt w konkretnym JoinPoincie. S膮 r贸偶ne typy porad, o czym w kolejnym punkcie. W Springu, Advice jest modelowany jako interceptor, utrzymuj膮cy 艂a艅cuch interceptor贸w wok贸艂 Joinpoint.


Rodzaje Advice w AOP

Spring AOP zawiera nast臋puj膮ce rodzaje porad:

  • Before advice – porada, kt贸ra dzia艂a przed JoinPointem, ale kt贸ra nie ma mo偶liwo艣ci zatrzymania wykonania programu (chyba, 偶e rzuci wyj膮tek).
  • After returning advice聽– porada, kt贸r膮 nale偶y uruchomi膰 po normalnym zako艅czeniu JoinPointu (na przyk艂ad, je艣li metoda powr贸ci bez rzucenia wyj膮tku).
  • After throwing advice聽– porada, kt贸r膮 nale偶y uruchomi膰, je艣li metoda zako艅czy dzia艂anie rzucaj膮c wyj膮tek.
  • After (finally) advice聽– porada, kt贸r膮 nale偶y uruchomi膰 niezale偶nie od sposobu, w jaki JoinPoint wychodzi z wykonania (normalny lub zako艅czony wyj膮tkiem).
  • Around advice聽– porada, kt贸ra otacza JoinPoint, taki jak wywo艂anie metody. Jest to najpot臋偶niejszy rodzaj porady. Wok贸艂 porady mo偶e wykonywa膰 niestandardowe zachowanie przed i po wywo艂aniu metody. Jest ona r贸wnie偶 odpowiedzialna za wyb贸r, czy kontynuowa膰 wykonanie do punktu z艂膮czenia (JoinPointu), czy te偶 skr贸ci膰 wykonanie zalecanej metody poprzez zwr贸cenie w艂asnej warto艣ci lub rzucenie wyj膮tku.

Mechanizm Proxy

Spring AOP do utworzenia proxy dla danego obiektu docelowego u偶ywa albo:

  • dynamicznych proxy JDK
  • albo CGLIB

Dynamiczne proxy JDK s膮 wbudowane w JDK, podczas gdy CGLIB jest powszechn膮 bibliotek膮 definicji klas o otwartym kodzie 藕r贸d艂owym (przepakowan膮 do spring-core).

Je艣li obiekt docelowy, kt贸ry ma by膰 proxowany, implementuje przynajmniej jeden interfejs, u偶ywane jest dynamiczne proxy JDK.聽 Natomiast je偶eli obiekt docelowy nie implementuje 偶adnych interfejs贸w, tworzone jest proxy przez CGLIB.

 


Przyk艂ad u偶ycia

Zaczynamy od napisania Join Pointu – czyli w przypadku springa b臋dzie to jaka艣 metoda.

Definijuemy Aspect, Pointcuty oraz Advice’y. Pointcuty mo偶na definiowa膰 oddzielnie a p贸藕niej wykorzystywa膰 jako ’metod臋’聽w Advice.

Po wywo艂aniu metody, na kt贸r膮 Aspekt by艂 za艂o偶ony wynik naszego programu jest nast臋puj膮cy:


Podsumowanie

Mechanizm AOP z pewno艣ci膮 jest jednym z bardziej zaawansowanych technik programowania, kt贸ra w pewnym momencie kariery staje si臋 niezb臋dna. Aspekty pozwalaj膮 nam na wszechstronno艣膰 pisania kodu. Za ich pomoc膮 mo偶emy bezinwazyjnie m.in. doda膰 logi audytu, lub transakcyjno艣膰. Jednak z do艣wiadczeniem przychodzi pewna pokora i chcia艂bym ustrzec wszystkich podjaranych, 偶e czytelno艣膰 i utrzymanie kodu jest wa偶niejsze ni偶 kod napisany fajnie. Z tego powodu raczej odradzam dodawanie biznes case’贸w w postaci aspekt贸w. Pami臋taj, ten kod kto艣 musi p贸藕niej utrzyma膰.

殴r贸d艂a:

5 1 vote
Article Rating
Tagi:
Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x