..


Sponsorētās saites

AOP - Aspekts Izveidot

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.
Izpildes formāts ir izpausme veidu:
 



 izpilde (modifikatori raksts? pasludināšana RET tipa modelis tipa modelis? nosaukums raksts (param-modelis) throws raksts?)

 
ja:
  • modifikatori-raksts: parametrus, piemērojot izvēles modifikators norāda tā tipa metodi. * Vērtība atbilst visu veidu modifikatorus.
  • RET-tipa modelis: tajā norādīts atgriešanās veidu metodi. * Vērtība atbilst visu veidu atgriezties.
  • Deklarēšana tipa modelis: iespēju parametrs, norāda klasi, kas deklarē metodi. * Vērtība tiek izmantota kā savvaļas karti, lai aizstātu pilnībā klases nosaukumu vai tā daļu.
  • nosaukums-modelis: nosaukums metodi. * Vērtība tiek izmantota kā savvaļas karti, lai aizstātu pilnībā nosaukumu, metodi vai tā daļu.
  • Param-modelis: norāda metodi parametrus. Vērtība () norāda metodi, kas ņem ne parametri, bet vērtību (..) norāda metodi, pieņem nulles vai vairāku parametru. * Vērtība tiek izmantota kā savvaļas karti, lai aizstātu tipu parametru metodi, piemēram (*, java.lang.String) atbilst metodei, kas ņem kā ievade divi parametri pirmajā jebkura veida, otrā veida String.
  • throws-raksts: neobligāts parametrs norāda izņēmuma veida izmet pa metodi, piemēram, throws java.lang.Exception
Lai labāk saprastu sintakses, mēs sākam ar piemēriem.

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.
Ļoti līdzīgi ir padoms, kas tiek izpildīts, kad metode throws izņēmums (pēc throwing ieteikumu), izmantojot anotācijas @ AfterThrowing:





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



  



 }







 }



Pavasara Java Guide
E-Learning
Linux (Kurss) Linux (Kurss)
Pilnīga rokasgrāmata, lai atvērtā koda sistēmas. Sākot no 49 €.
PHP (Kurss) PHP (Kurss)
Pilns kurss, lai radītu dinamisku tīmekļa vietnes. Sākot no 49 €.
Ruby un Ruby on Rails (Course) Ruby un Ruby on Rails (Course)
Izveidot programmatūras un Web lietojumprogrammas ar Ruby un ROR. Sākot no € 39.
Sponsorētās saites