..


Rėmėjų nuorodos

AOP - kraštinių Sukurti

Dabar pažiūrėkime, kaip sukurti aspektas.
Pirmiausia mes sukurti sąsają, kuri atitinka pavyzdį mes parašyti mūsų pointcuts:






 visuomenės sąsaja MyInterface {





  



 public void f1 ();





  



 visuomenės int F2 ();





  



 visuomenės int F3 () meta Exception;





  



 public void F4 () meta Exception;





  



 visuomenės int F5 ();







 }



Norėdami rašyti pointcut turi žinoti AspectJ pointcut žymenys , mūsų pavyzdžių mes naudosime tik vykdymo, kuris atitinka prisijungti taškas vykdymo metodus.
Vykdymo formatas tipo išraišką:
 



 vykdymas (modifikatorius-modelis? Deklaruojančiojo RET tipo modelio tipo modelį? Pavadinimas-modelis (Parametras-modelis) meta-modelis?)

 
jeigu:
  • modifikatorius-modelis: parametrai taikant neprivalomas modifikatorius nurodo metodo tipui. Vertė * atitinka visus modifikatorius rūšys.
  • RET tipo modelį: jis nurodo grįžti tipo metodas. Vertė * Atitinka visus grąžos rūšys.
  • Deklaruojančiojo tipo modelis: parinktį parametras nurodo klasę, kuri deklaruoja metodas. * Vertė yra naudojama kaip laukinių kortelė visiškai pakeisti klasės pavadinimą arba jo dalį.
  • Pavadinimas-modelis: metodo pavadinimas. * Vertė yra naudojama kaip laukinių kortelė pakeisti visiškai metodo arba jo dalis vardą.
  • Parametras-modelis: parodo metodo parametrai. Vertė () nurodo metodą, kuris nesiima jokių parametrų, o vertė (..) nurodo metodą, kuris priima nulį ar daugiau parametrų. * Vertė yra naudojama kaip laukinių kortelė pakeisti tipo parametras metodas, pavyzdžiui, (* java.lang.String) atitinka metodą, kad mano, kaip įvesti du parametrai bet kokio tipo, antrojo tipo first Styginių.
  • meta-modelis: neprivalomas parametras nurodo išimties tipo mesti metodu, pavyzdžiui, meta java.lang.Exception
Norėdami geriau suprasti, sintaksė, mes pradėsime su pavyzdžiais.

Pirma mes turime sukurti mūsų pačių aspektas:






 @ Aspektas







 {Visuomenės klasė MyAspect



  



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







 }



Kaip matome klasė komentuojami su @ aspektas. To nepakanka, nes jūs turite galimybę remti AOP nell'applicationContext XML.:





 <-! ENBLING AspectJ ->







 <aop:aspectj-autoproxy />









 <-! MYASPECT ->







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



Atlikę šias dvi operacijas yra pasirengę sukurti patarimus, pavyzdžiui, veiksmų, atliktų iki metodas f1 (prieš patarimai) vykdymą:






 @ Prieš ("vykdymo (* it.mrwebmaster.aop.MyInterface.f1 (..))")







 public void beforeF1 () {



  



 System.out.println ("PRIEŠ F1");







 }



Kaip matyti iš kodo mes naudojome @ Prieš anotacija, kuri priima kaip vertybę, kuri identifikuoja pointcut išraiška. Mūsų pavyzdyje, sąvoka atitinka visus metodus, kurie yra vadinami sąsaja it.mrwebmaster.aop.MyInterface F1 indipendetemente jų modifikatorius, grįžti tipo ir įvesties parametrai.
Taip pat mes galime naudoti informaciją, kad vykdo kai metodas baigia vykdymas (grįžęs patarimai) teisingai naudoti anotacija @ AfterReturning:






 @ AfterReturning (pointcut = "vykdymo (* it.mrwebmaster.aop.MyInterface.f2 (..))", grįžti =" retval ")







 public void afterReturningF2 (Object retval) {



  



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







 }



Šis įrašas trunka šiuos parametrus, be pointcuts, pavadinimas, suteiktas objektas grąžino metodu, kuris gali būti naudojamas kaip įvesties parametras Advaita. Šiuo atveju pointcut išraiškos inviarata išskyrus metodą, kuris šiuo atveju, F2 pavadinimą.
Labai panašus yra patarimas, kad yra įvykdytas, kai metodas metimų išimtis (po metimo patarimai) naudojant anotacija @ AfterThrowing:





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







 public void afterThrowingF3 (Throwable Throwable) {

 

  



 System.out.println ("F3 metimų" + Throwable);







 }



Skirtumas tas, kad metodas nėra grąžinti objektą, bet išimtis.

Kitas patarimas tipas yra visada atliekamos po metodas, tai yra laikas paprastai arba metimus išskyrus (po konsultacijos). Šis patarimas yra įgyvendinama @ naudoti po:






 @ Po ("vykdymo (* it.mrwebmaster.aop.MyInterface.f4 (..))")







 public void afterF4 () {



  



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







 }



Galiausiai mes matome, kaip padaryti, kad aplink patarimų ":






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







 public void aroundF5 (ProceedingJoinPoint PJP) {



  



 System.out.println ("PRIEŠ F5");



  



 pabandyti {



    



 Objektas retval = pjp.proceed ();



    



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



  



 } Sugautų žuvų kiekis (Throwable e) {



    



 System.out.println ("F5 metimų" + E);



  



 }







 }



Kaip matome iš pointcut išraiška kodas nėra skiriasi nuo kitų patarimų. Kokie pokyčiai yra tas pats patarimas, kad turi būti aiškiai remtis metodo vykdymo per klasės ProceedingJoinPoint tęsti, vienas kurių prašymas yra perduodamas kaip įvesties būdą. Ši sąsaja suteikia taip pat naudoja kitus metodus, pradėti gauti informacijos apie metodo parametrai, grįžimo tipo ir objekto, kuris metodas yra įvykdytas. Jis yra kairėje skaitytojui bet giliau.

Norėdami išbandyti mūsų patarimų mes galime padaryti, tai parašyti trivialus įgyvendinimo sąsaja MyInterface ir sukurti pagrindinius kriterijus:






 MyInterfaceImpl {visuomenės klasė įgyvendina MyInterface





  



 @ Valdymas



  



 public void f1 () {



    



 System.out.println ("F1");



  



 }





  



 @ Valdymas



  



 visuomenės int F2 () {



    



 System.out.println ("F2");



    



 return 0;



  



 }





  



 @ Valdymas



  



 visuomenės int F3 () meta Exception {



    



 System.out.println ("F3");



    



 išryškėti naujos Exception ("išimtis F3");



  



 }





  



 @ Valdymas



  



 public void F4 () meta Exception {



    



 System.out.println ("F4");



  



 }





  



 @ Valdymas



  



 visuomenės int F5 () {



    



 System.out.println ("F5");



    



 return 0;



  



 }







 }



. nell'applicationContext XML:





 <-! Tikslas: Objektas ->







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



Pagrindinis tyrimas:





 visuomenės klasė Pagrindinės {





  



 public static void main (String [] args) {





    



 / **



     



 * Instanz TOK konteinerių



     



 * /



    



 ApplicationContext ApplicationContext ClassPathXmlApplicationContext = nauji ("applicationContext.xml");





    



 MyInterface MyInterface = (MyInterface) applicationContext.getBean ("myInterfaceImpl");





    



 myInterface.f1 ();



    



 System.out.println ("########## \ n ");





    



 myInterface.f2 ();



    



 System.out.println ("########## \ n ");





    



 pabandyti {



      



 myInterface.f3 ();



    



 } Catch (Exception e) {}



    



 System.out.println ("########## \ n ");





    



 pabandyti {



      



 myInterface.f4 ();



    



 } Catch (Exception e) {}



    



 System.out.println ("########## \ n ");





    



 myInterface.f5 ();



    



 System.out.println ("########## \ n ");



  



 }







 }



Pavasario "Java" vadovas
E-mokymasis
"Linux" (kurso) "Linux" (kurso)
Užbaigti vadovą, kad atviro kodo sistema. Nuo 49 €.
PHP (kurso) PHP (kurso)
Visas kursas sukurti dinaminius interneto svetainių. Nuo 49 €.
Ruby ir Ruby on Rails (kurso) Ruby ir Ruby on Rails (kurso)
Sukurti programinę įrangą ir interneto programų su Ruby ir RoR. Nuo 39 €.
Rėmėjų nuorodos