..


Sponsorerede links

AOP - Aspect Opret

Lad os nu se, hvordan du opretter et aspekt.
Først og fremmest skaber vi et interface, som det eksempel, vi vil skrive vores pointcuts:






 offentlige grænseflade MyInterface {





  



 public void f1 ();





  



 public int f2 ();





  



 public int f3 () kaster undtagelse;





  



 public void f4 () kaster undtagelse;





  



 public int f5 ();







 }



For at skrive en pointcut skal kende AspectJ pointcut designatorer , i vores eksempler, vi vil bruge eneste henrettelse, der matcher slutte punkt udførelsesmetoder.
Formatet for udførelsen er et udtryk af typen:
 



 udførelse (modifikatorer-mønster? erklærer RET-type-mønster-type-mønster? navn-mønster (param-mønster) kaster-mønster?)

 
hvor:
  • modifikatorer-mønster: parametre ved at de anvender de fakultative modifier angiver typen af metoden. Værdien * matcher alle typer af modifikatorer.
  • RET-type-mønster: Det angiver returtypen metode. Værdien * matcher alle former for afkast.
  • Erklære-type-mønster: mulighed parameter angiver den klasse, der erklærer den metode. * Værdien er brugt som et wild card til at erstatte helt klassen navnet eller en del af det.
  • navn-mønster: Navnet på den metode. * Værdien er brugt som et wild card til at erstatte helt navnet på den metode eller en del af det.
  • param-mønster: angiver metoden parametre. Værdien () angiver en metode, der tager nogen parametre, mens værdien (..) angiver en metode, der accepterer nul eller flere parametre. * Værdien er brugt som et wild card til at erstatte den type parameter i en metode, for eksempel (*, java.lang.String) svarer til en metode, der tager som input to parametre i den første af enhver type, den anden type String.
  • kaster-mønster: valgfrie parameter angiver den type undtagelse kastet efter den metode, for eksempel, kaster java.lang.Exception
For bedre at forstå den syntaks, vi starter med eksempler.

Først skal vi skabe vores egen aspekt:






 @ Aspect







 {Public class MyAspect



  



 .............







 }



Som vi ser klasse er kommenteret med @ Aspect. Det er ikke nok, fordi du er nødt til at aktivere understøttelse for AOP nell'applicationContext XML.:





 <-! ENBLING AspectJ ->







 <aop:aspectj-autoproxy />









 <-! MYASPECT ->







 <bean id="myAspect" class="it.mrwebmaster.aop.MyAspect" />



Når du har lavet disse to operationer er klar til at oprette et råd, for eksempel en handling udført før gennemførelsen af den metode, f1 (før rådgivning):






 @ Før ("execution (* it.mrwebmaster.aop.MyInterface.f1 (..))")







 public void beforeF1 () {



  



 System.out.println ("FØR F1");







 }



Som det kan ses fra den kode, vi brugte @ Før annotation, der accepterer et udtryk som en værdi, der identificerer en pointcut. I vores eksempel, matcher udtrykket alle metoder, der kaldes grænseflade it.mrwebmaster.aop.MyInterface f1 indipendetemente af deres modifikatorer, returtypen og input parametre.
Ligeledes kan vi bruge et råd, som udfører, når en metode afslutter sin udførelse (efter hjemkomsten rådgivning) korrekt brug af annotation @ AfterReturning:






 @ AfterReturning (pointcut = "execution (* it.mrwebmaster.aop.MyInterface.f2 (..))", tilbage =" retVal ")







 public void afterReturningF2 (Object retVal) {



  



 System.out.println ("RETURN F2" + retVal);







 }



Denne record tager følgende parametre, foruden pointcuts, vendte det navn givet til objekt ved den metode, der kan gives som et input parameter i Advaita. I dette tilfælde udtryk for pointcut er inviarata bortset fra navnet på den metode, som i dette tilfælde, F2.
Meget lignende er den rådgivning, som udføres når en metode kaster en undtagelse (efter at smide rådgivning) ved hjælp af annotation @ AfterThrowing:





 @ AfterThrowing (pointcut = "execution (* it.mrwebmaster.aop.MyInterface.f3 (..))", smide =" Throwable ")







 public void afterThrowingF3 (Throwable Throwable) {

 

  



 System.out.println ("F3 kaster" + Throwable);







 }



Forskellen er, at metoden ikke returnerer et objekt, men en undtagelse.

En anden type rådgivning er altid henrettet efter en metode, er det tid normalt eller kaster en undtagelse (efter rådgivning). Dette råd er gennemført ved brug af @ Efter:






 @ Efter ("execution (* it.mrwebmaster.aop.MyInterface.f4 (..))")







 public void afterF4 () {



  



 System.out.println ("Efter F4");







 }



Endelig ser vi, hvordan du får 'omkring råd:






 @ Around ("execution (* it.mrwebmaster.aop.MyInterface.f5 (..))")







 public void aroundF5 (ProceedingJoinPoint PJP) {



  



 System.out.println ("FØR F5");



  



 try {



    



 Objekt retVal = pjp.proceed ();



    



 System.out.println ("RETURN F5" + retVal);



  



 } Catch (Throwable e) {



    



 System.out.println ("F5 kaster" + e);



  



 }







 }



Som vi kan se af koden for det pointcut udtryk er ikke anderledes end andre råd. Hvilke ændringer er det samme råd, som skal eksplicit påberåbe udførelse af metoden ved hjælp af metoden i klassen ProceedingJoinPoint videre, den ene, hvis ansøgning er gået som input. Denne brugerflade giver bruger også andre metoder gå videre til at hente oplysninger om metoden parametre, returtypen og den genstand, om hvilke metode er udført. Det overlades til læseren noget dybere.

For at teste vores råd, vi kan gøre, er at skrive en triviel implementering af grænsefladen MyInterface, og oprette en primær 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 ny undtagelse ("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:





 <-! Mål: Objekt ->







 <bean id="myInterfaceImpl" class="it.mrwebmaster.aop.MyInterfaceImpl" />



De vigtigste test:





 public class Hoved {





  



 public static void main (String [] args) {





    



 / **



     



 * Instanz IOC container



     



 * /



    



 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 ");



  



 }







 }



Spring Java Guide
E-Learning
Linux (Kursus) Linux (Kursus)
Komplet guide til open source-system. Fra 49 €.
PHP (Kursus) PHP (Kursus)
Fuld kursus for at skabe dynamiske web-sites. Fra 49 €.
Ruby og Ruby on Rails (Kursus) Ruby og Ruby on Rails (Kursus)
Opret software og web-applikationer med Ruby og RoR. Fra 39 €.
Sponsorerede links