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 6 votes
Article Rating
Tagi:
Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x