Aspektorienterad programmering (AOP) kompletterar OOPs i den meningen att det också ger modularitet. Men nyckelenheten för modularitet är aspekt än klass.
AOP delar upp programlogiken i distinkta delar (kallade bekymmer). Den används för att öka modulariteten med övergripande bekymmer .
A övergripande oro är ett problem som kan påverka hela applikationen och bör centraliseras på en plats i kod som möjligt, såsom transaktionshantering, autentisering, loggning, säkerhet etc.
Varför använda AOP?
Det ger det pluggbara sättet att dynamiskt lägga till den extra oro före, efter eller runt den faktiska logiken. Anta att det finns 10 metoder i en klass enligt nedan:
class A{ public void m1(){...} public void m2(){...} public void m3(){...} public void m4(){...} public void m5(){...} public void n1(){...} public void n2(){...} public void p1(){...} public void p2(){...} public void p3(){...} }
Det finns 5 metoder som börjar från m, 2 metoder som börjar från n och 3 metoder som börjar från p.
Förstå scenario Jag måste upprätthålla logg och skicka meddelande efter anropsmetoder som börjar från m.
Problem utan AOP Vi kan anropa metoder (som upprätthåller logg och skickar meddelanden) från metoder som börjar med m. I ett sådant scenario måste vi skriva koden i alla de 5 metoderna.
Men om klienten i framtiden säger att jag inte behöver skicka meddelande, du måste ändra alla metoder. Det leder till underhållsproblemet.
Lösning med AOP Vi behöver inte anropa metoder från metoden. Nu kan vi definiera ytterligare problem som att upprätthålla logg, skicka meddelanden etc. i metoden för en klass. Dess post anges i xml-filen.
I framtiden, om klienten säger att aviseringsfunktionen ska tas bort, behöver vi bara ändra i xml-filen. Så underhållet är enkelt i AOP.
hur man öppnar en json-fil
Var använder man AOP?
AOP används oftast i följande fall:
- att tillhandahålla deklarativa företagstjänster såsom deklarativ transaktionshantering.
- Det tillåter användare att implementera anpassade aspekter.
AOP-koncept och terminologi
AOP-koncept och terminologier är följande:
- Gå med punkt
- Råd
- Pointcut
- Introduktion
- Målobjekt
- Aspekt
- Jaktplan
- AOP proxy
- Vävning
Gå med punkt
Join point är vilken punkt som helst i ditt program såsom metodexekvering, undantagshantering, fältaccess etc. Spring stöder endast metodexekveringsjoin point.
Råd
Råd representerar en åtgärd som vidtas av en aspekt vid en viss kopplingspunkt. Det finns olika typer av råd:
- Före råd : den körs före en sammanfogningspunkt.
- Efter att ha returnerat råd : den körs efter att en gemensam punkt slutförs normalt.
- Efter att kasta råd : den körs om metoden avslutas genom att göra ett undantag.
- Efter (äntligen) Råd : den körs efter en kopplingspunkt oavsett utgångspunkt för kopplingspunkten, oavsett om det är normalt eller exceptionellt retur.
- Runt Råd : Den körs före och efter en kopplingspunkt.
Pointcut
Det är ett uttrycksspråk för AOP som matchar join-poäng.
Introduktion
Det innebär införande av ytterligare metod och fält för en typ. Det låter dig introducera ett nytt gränssnitt för alla rekommenderade objekt.
Målobjekt
Det är föremålet, det vill säga att få råd av en eller flera aspekter. Det är också känt som proxyobjekt på våren eftersom Spring AOP implementeras med runtime-proxyer.
Aspekt
Det är en klass som innehåller råd, joinpoints mm.
Jaktplan
Det är en aspekt som bara innehåller ett råd.
AOP proxy
Den används för att implementera aspektkontrakt, skapade av AOP-ramverket. Det kommer att vara en JDK dynamisk proxy eller CGLIB proxy i våren.
Vävning
Det är processen att länka aspekt med andra applikationstyper eller objekt för att skapa ett rekommenderat objekt. Vävning kan göras vid kompileringstid, laddningstid eller körtid. Spring AOP utför vävning under körning.
java returkommando
AOP-implementeringar
AOP-implementationer tillhandahålls av:
- AspektJ
- Vårens AOP
- JBoss AOP
Vårens AOP
Spring AOP kan användas på tre sätt som anges nedan. Men det mycket använda tillvägagångssättet är Spring AspectJ Annotation Style. De 3 sätten att använda vårens AOP ges nedan:
- By Spring1.2 Gammal stil (dtd-baserad) (stöds även i Spring3)
- Av AspectJ-anteckningsstil
- By Spring XML-konfigurationsstil (schemabaserad)
Referenslänkar
Vårkälla AOPSpring Source AOP API
Wikipedia