..
La oss nå se hvordan man lager et aspekt.
Først skaper vi et grensesnitt eksempel på hvor vi vil skrive vår pointcuts:
public interface MyInterface {
public void f1 ();
public int f2 ();
public int f3 () kaster Unntak;
public void f4 () kaster Unntak;
public int f5 ();
}
Å skrive en pointcut må vite AspectJ pointcut utpeke , i vårt eksempel vil vi bruke kun henrettelsen delta punktet som samsvarer med resultatene av metodene.
gjennomføring (modifikatorer-mønster? ret-type mønster-erklære-type-mønster? name-mønster (mønster-param) kaster-mønster?)hvor:
Først må vi lage vår aspekt:
@ Aspect
public class {MyAspect
.............
}
Som vi ser den klassen er annotert med @ Aspect.
Dette er ikke nok fordi du må aktivere støtte for AOP nell'applicationContext Xml.
<-! ENBLING AspectJ -> <aop:aspectj-autoproxy /> <-! MYASPECT -> <bean id="myAspect" class="it.mrwebmaster.aop.MyAspect" />
Når du har gjort disse to operasjonene er klar til å lage et råd, for eksempel, en handling utført før utførelsen av metoden f1 (før råd):
@ Før ("henrettelse (* it.mrwebmaster.aop.MyInterface.f1 (..))")
public void beforeF1 () {
System.out.println ("FØR F1");
}
Som kan sees fra koden vi brukte @ Før merknaden som godtar et uttrykk som en verdi som identifiserer en pointcut.
I vårt eksempel, matcher uttrykket eventuelle grensesnitt metoder som kalles F1 it.mrwebmaster.aop.MyInterface indipendetemente sine modifier, retur og skriv inn parametere.
Tilsvarende kan vi bruke et råd som kjøres når en metode fullfører sin utførelse (etter retur råd) riktig å bruke annotation @ AfterReturning:
@ AfterReturning (pointcut = "utførelse (* it.mrwebmaster.aop.MyInterface.f2 (..))", tilbake =" retVal ")
public void afterReturningF2 (Object retVal) {
System.out.println ("F2 RETURN" + retVal);
}
Denne posten tar som parametre, i tillegg til pointcut, returnerte navnet gitt til objektet ved metoden som kan bli gitt som en inndataparameter av Advaita.
I dette tilfellet pointcut uttrykket forblir inviarata bortsett fra navnet på metoden, som i dette tilfellet er f2.
@ AfterThrowing (pointcut = "utførelse (* it.mrwebmaster.aop.MyInterface.f3 (..))", kaste =" Kan kastes ")
public void afterThrowingF3 (Kan kastes Kan kastes) {
System.out.println ("F3 kaster" + Kan kastes);
}
Forskjellen er at metoden ikke returnerer et objekt, men et unntak.
En annen type råd er å alltid utført etter en metode, er det på tide normalt eller kaster et unntak (etter råd). Dette rådet er implementert gjennom bruk av @ Etter:
@ Etter ("henrettelse (* it.mrwebmaster.aop.MyInterface.f4 (..))")
public void afterF4 () {
System.out.println ("ETTER F4");
}
Til slutt ser vi hvordan du kan få "rundt råd:
@ Around ("henrettelse (* it.mrwebmaster.aop.MyInterface.f5 (..))")
public void aroundF5 (ProceedingJoinPoint PJP) {
System.out.println ("FØR F5");
try {
Object retVal = pjp.proceed ();
System.out.println ("RETURN F5" + retVal);
} Catch (Kan kastes e) {
System.out.println ("F5 kaster" + e);
}
}
Som vi ser av koden til pointcut uttrykket er ikke forskjellig fra andre råd.
Hvilke endringer er det samme råd som må eksplisitt påberope utførelsen av metoden ved metoden av klassen ProceedingJoinPoint fortsette, en forespørsel som er sendt som inndata.
Dette grensesnittet gir også bruker andre metoder fortsette å hente informasjon om metoden parametere, retur-type og objektet på hvilken metode som er utført.
Det overlates til leseren noen dybde.
For å teste våre råd vi kan gjøre er å skrive en triviell implementering av grensesnittet MyInterface, og skape en hoved test:
MyInterfaceImpl {public class implementerer MyInterface
@ Override
public void f1 () {
System.out.println ("F1");
}
@ Override
public int f2 () {
System.out.println ("F2");
return 0;
}
@ Override
public int f3 () kaster Exception {
System.out.println ("F3");
kaste nytt unntak ("Unntak F3");
}
@ Override
public void f4 () kaster Exception {
System.out.println ("F4");
}
@ Override
public int f5 () {
System.out.println ("F5");
return 0;
}
}
. nell'applicationContext xml:
<-! Målobjekt -> <bean id="myInterfaceImpl" class="it.mrwebmaster.aop.MyInterfaceImpl" />De viktigste test:
public class Hoved {
public static void main (String [] args) {
/ **
* Instanz IOC container
* /
ApplicationContext ApplicationContext = new ClassPathXmlApplicationContext ("applicationContext.xml");
MyInterface MyInterface = (MyInterface) applicationContext.getBean ("myInterfaceImpl");
myInterface.f1 ();
System.out.println ("########## \ n ");
myInterface.f2 ();
System.out.println ("########## \ n ");
try {
myInterface.f3 ();
} Catch (Exception e) {}
System.out.println ("########## \ n ");
try {
myInterface.f4 ();
} Catch (Exception e) {}
System.out.println ("########## \ n ");
myInterface.f5 ();
System.out.println ("########## \ n ");
}
}
| |
Linux (Course)
Komplett guide til open-source system. Starter fra 49 €. |
| |
PHP (Course)
Full kurs for å lage dynamiske nettsider. Starter fra 49 €. |
| |
Ruby og Ruby On Rails (Course)
Opprette programvare og web applikasjoner med Ruby og RoR. Starter fra 39 €. |