..
Katsotaanpa nyt, miten luoda näkökohta.
Ensinnäkin luomme käyttöliittymä joka esimerkissä kirjoittaa pointcuts:
julkinen rajapinta MyInterface {
public void f1 ();
public int f2 ();
public int f3 () throws Exception;
public void f4 () throws Exception;
public int F5 ();
}
Voit kirjoittaa pointcut täytyy tietää AspectJ pointcut designators , meidän esimerkeissä käytämme vain suorittamisen, joka vastaa liittyä pisteen toteuttamisen menetelmiä.
toteutus (määritteet-kuvio? julistaminen RET-tyyppi-kuvio-tyyppi-kuvio? nimi-kuvio (param-kuvio) throws-kuvio?)missä:
Ensin meidän täytyy luoda oma näkökulma:
@ Aspect
{Public class MyAspect
.............
}
Kuten näemme luokka on liitettiin Euroopan @ Aspect.
Tämä ei kuitenkaan riitä, koska olet käyttöön tuen AOP nell'applicationContext. Xml:
<! - ENBLING AspectJ -> <aop:aspectj-autoproxy /> <! - MYASPECT -> <bean id="myAspect" class="it.mrwebmaster.aop.MyAspect" />
Kun olet tehnyt nämä kaksi toimintaa ovat valmiita luomaan neuvoja esimerkiksi toiminto, joka suoritetaan ennen toteuttamista menetelmän f1 (ennen neuvonta):
@ Ennen ("täytäntöönpano (* it.mrwebmaster.aop.MyInterface.f1 (..))")
public void beforeF1 () {
System.out.println ("ennen F1");
}
Kuten voidaan nähdä koodi käytimme @ Ennen merkintä, joka hyväksyy ilmaus kuin arvo, joka tunnistaa pointcut.
Tässä esimerkissä lauseke vastaa kaikkia menetelmiä, joita kutsutaan käyttöliittymän it.mrwebmaster.aop.MyInterface F1 indipendetemente niiden määritteet, paluuarvon tyyppi ja parametreista.
Vastaavasti voimme käyttää neuvoja, suoritetaan, kun menetelmä on valmis toteutettavaksi (palattuaan neuvonta) oikein käyttämällä merkintä @ AfterReturning:
@ AfterReturning (pointcut = "suorittamiseen (* it.mrwebmaster.aop.MyInterface.f2 (..))", paluu =" retval ")
public void afterReturningF2 (Object retval) {
System.out.println ("PALAA F2" + retval);
}
Tämä levy vie seuraavat parametrit lisäksi pointcuts, annettu nimi esine palautetaan menetelmällä, joka voidaan antaa tulo parametrin Advaita.
Tällöin ilmaus pointcut on inviarata paitsi nimen menetelmä, joka tässä tapauksessa, f2.
@ AfterThrowing (pointcut = "suorittamiseen (* it.mrwebmaster.aop.MyInterface.f3 (..))", heitto =" Throwable ")
public void afterThrowingF3 (Throwable Throwable) {
System.out.println ("F3 heittää" + Throwable);
}
Erona on, että menetelmä ei palauta kohde vaan poikkeus.
Toinen tyyppi neuvoja suoritetaan aina, kun menetelmä on aika normaalisti tai heittää poikkeus (lausunnon jälkeen). Tämä neuvo on toteutettu käyttämällä @ jälkeen:
@ Jälkeen ("täytäntöönpano (* it.mrwebmaster.aop.MyInterface.f4 (..))")
public void afterF4 () {
System.out.println ("jälkeen F4");
}
Lopuksi näemme miten "noin neuvot:
@ Around ("täytäntöönpano (* it.mrwebmaster.aop.MyInterface.f5 (..))")
public void aroundF5 (ProceedingJoinPoint PJP) {
System.out.println ("ennen F5");
try {
Object retval = pjp.proceed ();
System.out.println ("PALAA F5" + retval);
} Catch (Throwable e) {
System.out.println ("F5 heittää" + e);
}
}
Kuten voimme nähdä koodi pointcut ilmaisunvapautta ei poikkea muista neuvoista.
Mitä muutoksia on samoja neuvoja, jotka on nimenomaisesti vedota täytäntöönpanon menetelmän kautta menetelmä luokan ProceedingJoinPoint edetä, yksi jonka hakemus on läpäissyt syötteenä.
Tämä liitäntä tarjoaa myös käyttää muita menetelmiä edetä hakemaan tietoja menetelmän parametrit, paluuarvon tyyppi ja kohteita, joihin menetelmä on suoritettu.
Se jää lukijan mitään syvempää.
Testata neuvoja voimme tehdä, on kirjoittaa triviaali liitännän toteuttaminen MyInterface, ja luoda tärkein testi:
MyInterfaceImpl {public class toteuttaa MyInterface
@ Override
public void f1 () {
System.out.println ("F1");
}
@ Override
public int f2 () {
System.out.println ("F2");
return 0;
}
@ Override
public int f3 () throws Exception {
System.out.println ("F3");
throw new Exception ("Exception F3");
}
@ Override
public void f4 () throws Exception {
System.out.println ("F4");
}
@ Override
public int F5 () {
System.out.println ("F5");
return 0;
}
}
nell'applicationContext. xml:
<! - Target: Object -> <bean id="myInterfaceImpl" class="it.mrwebmaster.aop.MyInterfaceImpl" />Tärkein testi:
public class Main {
public static void main (String [] args) {
/ **
* Instanz KOK kontti
* /
ApplicationContext ApplicationContext ClassPathXmlApplicationContext = new ("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 (kurssi)
Täydellinen opas avoimen lähdekoodin järjestelmä. Alkaen 49 €. |
| |
PHP (kurssi)
Täysi tietenkin luoda dynaamisia Web-sivustoja. Alkaen 49 €. |
| |
Ruby ja Ruby on Rails (kurssi)
Luo ohjelmistojen ja web-sovellusten kanssa Ruby ja RoR. Alkaen 39 €. |