Aspektorienteret programmering (AOP) komplimenterer OOP'er i den forstand, at det også giver modularitet. Men nøgleenheden for modularitet er aspekt end klasse.
AOP opdeler programlogikken i adskilte dele (kaldet bekymringer). Det bruges til at øge modulariteten ved tværgående bekymringer .
EN tværgående bekymring er en bekymring, der kan påvirke hele applikationen og bør centraliseres på ét sted i kode som muligt, såsom transaktionsstyring, autentificering, logning, sikkerhed osv.
Hvorfor bruge AOP?
Det giver den pluggbare måde til dynamisk at tilføje den ekstra bekymring før, efter eller omkring den faktiske logik. Antag, at der er 10 metoder i en klasse som angivet nedenfor:
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(){...} }
Der er 5 metoder, der starter fra m, 2 metoder, der starter fra n og 3 metoder, der starter fra p.
Forståelse af scenarie Jeg skal vedligeholde log og sende besked efter opkaldsmetoder, der starter fra m.
Problem uden AOP Vi kan kalde metoder (der vedligeholder log og sender notifikationer) fra metoderne, der starter med m. I et sådant scenarie skal vi skrive koden i alle de 5 metoder.
Men hvis klienten fremover siger, at jeg ikke behøver at sende besked, skal du ændre alle metoderne. Det fører til vedligeholdelsesproblemet.
Løsning med AOP Vi behøver ikke kalde metoder fra metoden. Nu kan vi definere den ekstra bekymring som at vedligeholde log, sende meddelelser osv. i metoden for en klasse. Dens indtastning er angivet i xml-filen.
I fremtiden, hvis klienten siger at fjerne notifier-funktionaliteten, skal vi kun ændre i xml-filen. Så vedligeholdelse er let i AOP.
f-streng python
Hvor bruger man AOP?
AOP bruges mest i følgende tilfælde:
- at levere deklarative virksomhedstjenester såsom deklarativ transaktionsstyring.
- Det giver brugerne mulighed for at implementere tilpassede aspekter.
AOP-koncepter og terminologi
AOP begreber og terminologier er som følger:
- Deltag punkt
- Råd
- Pointcut
- Introduktion
- Målobjekt
- Aspekt
- Interceptor
- AOP Proxy
- Vævning
Deltag punkt
Join point er et hvilket som helst punkt i dit program, såsom metodeudførelse, undtagelseshåndtering, feltadgang osv. Spring understøtter kun metodeudførelse joinpoint.
Råd
Råd repræsenterer en handling foretaget af et aspekt på et bestemt sammenføjningspunkt. Der er forskellige typer råd:
- Før råd : den udføres før et sammenføjningspunkt.
- Efter returnering af råd : det udføres efter et fælles punkt er fuldført normalt.
- Efter kasteråd : den udføres, hvis metode afsluttes ved at kaste en undtagelse.
- Efter (endelig) Råd : den udføres efter et join-punkt uanset join-punkt-exit, hvad enten det er normalt eller exceptionelt retur.
- Omkring Rådgivning : Den udføres før og efter et joinpunkt.
Pointcut
Det er et udtrykssprog af AOP, der matcher joinpoint.
Introduktion
Det betyder introduktion af yderligere metode og felter for en type. Det giver dig mulighed for at introducere ny grænseflade til ethvert anbefalet objekt.
Målobjekt
Det er objektet, dvs. at blive rådgivet af et eller flere aspekter. Det er også kendt som proxy-objekt om foråret, fordi Spring AOP er implementeret ved hjælp af runtime-proxies.
Aspekt
Det er en klasse, der indeholder råd, joinpoints mm.
Interceptor
Det er et aspekt, der kun indeholder ét råd.
AOP Proxy
Det bruges til at implementere aspektkontrakter, skabt af AOP-ramme. Det vil være en JDK dynamisk proxy eller CGLIB proxy i spring framework.
Vævning
Det er processen med at forbinde aspekt med andre applikationstyper eller objekter for at skabe et anbefalet objekt. Vævning kan udføres ved kompileringstid, indlæsningstid eller kørselstid. Spring AOP udfører vævning under kørsel.
understreng streng java
AOP implementeringer
AOP-implementeringer leveres af:
- AspektJ
- Forårs AOP
- JBoss AOP
Forårs AOP
Spring AOP kan bruges på 3 måder angivet nedenfor. Men den meget brugte tilgang er Spring AspectJ Annotation Style. De 3 måder at bruge foråret AOP på er angivet nedenfor:
- Af Spring1.2 Gammel stil (dtd-baseret) (understøttes også i Spring3)
- Af AspectJ annotations-stil
- By Spring XML-konfigurationsstil (skemabaseret)
Reference links
Spring Kilde AOPSpring Source AOP API
Wikipedia