..
Tagad pieņemsim redzēt, kā izveidot aspektu.
Pirmkārt, mēs izveidot saskarni, kas piemērā mēs rakstīt mūsu pointcuts:
valsts saskarni MyInterface {
valsts spēkā f1 ();
valsts int f2 ();
valsts int f3 () throws Izņēmums;
valsts spēkā f4 () throws Izņēmums;
valsts int F5 ();
}
Lai uzrakstītu pointcut ir jāzina AspectJ pointcut designators , mūsu piemēru, mēs izmantojam tikai izpilde, kas atbilst pievienoties punkta izpildes metodes.
izpilde (modifikatori raksts? pasludināšana RET tipa modelis tipa modelis? nosaukums raksts (param-modelis) throws raksts?)ja:
Vispirms mums ir jārada mūsu pašu aspektu:
@ Aspekts
{Valsts klases MyAspect
.............
}
Kā mēs redzam klasē, ir atzīmēti ar @ aspektu.
Tas nav pietiekami, jo jums ir, lai atbalsts AOP nell'applicationContext XML.:
<- ENBLING AspectJ! -> <aop:aspectj-autoproxy /> <- MYASPECT! -> <bean id="myAspect" class="it.mrwebmaster.aop.MyAspect" />
Kad esat veicis šīm divām darbībām ir gatavi izveidot konsultāciju palīdzību, piemēram, prasība veikt pirms izpildes metodes f1 (pirms konsultācijām):
@ Pirms ("izpilde (* it.mrwebmaster.aop.MyInterface.f1 (..))")
valsts spēkā beforeF1 () {
System.out.println ("PIRMS F1");
}
Kā redzams no kodu, kuru mēs izmantojām @ Pirms anotāciju, kas pieņem izteiksmi kā vērtība, kas identificē pointcut.
Mūsu Piemēram, izteiksme atbilst visām metodēm, kuras sauc par saskarni it.mrwebmaster.aop.MyInterface f1 indipendetemente to modifikatori, atgriezes tipa vadībai un ievades parametrus.
Līdzīgi mēs varam izmantot padomus, kas izpilda tad, kad metode ir pabeidzis izpildi (pēc atgriešanās konsultācijām) pareizi, izmantojot anotācijas @ AfterReturning:
@ AfterReturning (pointcut = "izpilde (* it.mrwebmaster.aop.MyInterface.f2 (..))", atgriežas =" retval ")
valsts spēkā afterReturningF2 (Object retval) {
System.out.println ("Atgriešanās F2" + retval);
}
Šis ieraksts veic šādus parametrus, papildus pointcuts, dotais nosaukums objekts, ko atgriež metode, ko var ievadīt kā ieejas parametrs Advaita.
Šādā gadījumā par pointcut izteiksmes inviarata, izņemot nosaukumu metodi, kas šajā gadījumā, f2.
@ AfterThrowing (pointcut = "izpilde (* it.mrwebmaster.aop.MyInterface.f3 (..))", throwing =" Throwable ")
valsts spēkā afterThrowingF3 (Throwable Throwable) {
System.out.println ("F3 throws" + Throwable);
}
Atšķirība ir tā, ka metode, neatgriežas objektu, bet izņēmums.
Vēl viens padoms veids vienmēr veikt pēc metodes, tas ir laiks normāli vai met izņēmumu (pēc konsultācijas). Šis ieteikums ir īstenots, izmantojot @ Pēc:
@ Pēc ("izpilde (* it.mrwebmaster.aop.MyInterface.f4 (..))")
valsts spēkā afterF4 () {
System.out.println ("Pēc F4");
}
Visbeidzot, mēs redzēt, kā padarīt "apkārt konsultācijas:
@ Around ("izpilde (* it.mrwebmaster.aop.MyInterface.f5 (..))")
valsts spēkā aroundF5 (ProceedingJoinPoint PJP) {
System.out.println ("PIRMS F5");
mēģiniet {
Objektu retval = pjp.proceed ();
System.out.println ("Atgriešanās F5" + retval);
} Nozveja (Throwable e) {
System.out.println ("F5 throws" + e);
}
}
Kā redzams no kodu pointcut izpausme nav atšķiras no citiem padomiem.
Kādas pārmaiņas ir tas pats padoms, ka ir skaidri atsaukties izpildes metodes, izmantojot metodi klases ProceedingJoinPoint turpināt, viens, kuru pieteikumi ir pagājis kā priekšnodokli.
Šī saskarne nodrošina izmanto arī citas metodes, turpināt, lai iegūtu informāciju par metodes parametros, atgriezes tipa vadībai un objekts, kurā metode ir izpildīts.
Tas ir atstāts lasītāja, ja dziļāk.
Lai pārbaudītu mūsu padomiem mēs varam darīt, ir rakstīt trivial īstenot saskarnes MyInterface, un izveidot galvenā testa izdara mērījumus:
MyInterfaceImpl {valsts klases īsteno MyInterface
@ Override
valsts spēkā f1 () {
System.out.println ("F1");
}
@ Override
valsts int f2 () {
System.out.println ("F2");
atpakaļ 0;
}
@ Override
valsts int f3 () throws Izņēmums {
System.out.println ("F3");
mest jaunu Izņēmums ("Izņēmums F3");
}
@ Override
valsts spēkā f4 () throws Izņēmums {
System.out.println ("F4");
}
@ Override
valsts int F5 () {
System.out.println ("F5");
atpakaļ 0;
}
}
. nell'applicationContext xml:
<! - Target: Object -> <bean id="myInterfaceImpl" class="it.mrwebmaster.aop.MyInterfaceImpl" />Galvenais tests:
valsts klases Main {
valsts statisko spēku galvenās (String [] args) {
/ **
* Instanz SOK konteiners
* /
ApplicationContext ApplicationContext ClassPathXmlApplicationContext = jauni ("applicationContext.xml");
MyInterface MyInterface = (MyInterface) applicationContext.getBean ("myInterfaceImpl");
myInterface.f1 ();
System.out.println ("########## \ n ");
myInterface.f2 ();
System.out.println ("########## \ n ");
mēģiniet {
myInterface.f3 ();
} Nozveja (Izņēmums e) {}
System.out.println ("########## \ n ");
mēģiniet {
myInterface.f4 ();
} Nozveja (Izņēmums e) {}
System.out.println ("########## \ n ");
myInterface.f5 ();
System.out.println ("########## \ n ");
}
}
| |
Linux (Kurss)
Pilnīga rokasgrāmata, lai atvērtā koda sistēmas. Sākot no 49 €. |
| |
PHP (Kurss)
Pilns kurss, lai radītu dinamisku tīmekļa vietnes. Sākot no 49 €. |
| |
Ruby un Ruby on Rails (Course)
Izveidot programmatūras un Web lietojumprogrammas ar Ruby un ROR. Sākot no € 39. |