..


Спонсоред Линкс

АОП - аспект Направи

Хајде сада да видимо како да креирате аспект.
Пре свега ми стварамо интерфејс на којем примеру ћемо писати наше поинтцутс:






 јавни интерфејс МиИнтерфаце {





  



 публиц воид Ф1 ();





  



 публиц воид ф2 ();





  



 публиц инт ф3 () баца изузетак;





  



 публиц воид Ф4 () баца изузетак;





  



 публиц воид Ф5 ();







 }



Да бисте написали поинтцут мора да зна АспецтЈ поинтцут десигнаторс , у нашим примерима ћемо користити само извршење који одговара придружити тачка извршење методе.
Формат извршења израз типа:
 



 извршења (модификатора-образац Декларисање рет-тип-модел-тип-образац-име шаблона (Парам-образац)? баца-шаблон?)

 
где је:
  • модификатора-образац: параметри применом опциони модификатора указује на тип метода. Вредност * одговараће свим врстама модификатори.
  • рет-тип-образац: он указује на повратак тип метода. Вредност * одговараће свим типовима повратка.
  • Декларисање типа-образац: опција параметар, указује класе која декларише методу. * Вредност се користи као вилд цард да у потпуности замени име класе или њен део.
  • име-образац: име метода. * Вредност се користи као вилд цард да у потпуности замени име метод или његов део.
  • Парам-образац: указује на метод параметара. Вредност () указује метод који не узима параметре, док вредност (..) указује метод који прихватају нула или више параметара. * Вредност се користи као вилд цард да замени је параметар типа метода, на пример (*, јава.ланг.Стринг) одговара метод који узима као улаз два параметра у првом од било које врсте, други тип стринг.
  • баца-образац: опциони параметар указује на тип изузетак бачен методом, на пример, баца јава.ланг.Екцептион
Да бисте боље разумели синтаксу, почињемо са примерима.

Прво морамо да створи сопствени аспект:






 @ Аспект







 {Публиц цласс МиАспецт



  



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







 }



Као што видимо класа је означена са @ аспект. То није довољно, јер имате да омогућите подршку за АОП нелл'апплицатионЦонтект КСМЛ.:





 <- ЕНБЛИНГ АспецтЈ ->







 <аоп:аспецтј-аутопроки />









 <- МИАСПЕЦТ ->







 <беан ид="миАспецт" цласс="ит.мрвебмастер.аоп.МиАспецт" />



Након што сте направили ове две операције су спремни да створе савет, на пример, акција изведена пре извршења метода Ф1 (пре савет):






 @ Пре ("извршавање (* ит.мрвебмастер.аоп.МиИнтерфаце.ф1 (..))")







 публиц воид бефореФ1 () {



  



 Систем.оут.принтлн ("ПРЕ Ф1");







 }



Као што се може видети из кода смо користили @ Пре напомена која прихвата израза као вредност која идентификује поинтцут. У нашем примеру, израз одговара све методе које се зову интерфејс ит.мрвебмастер.аоп.МиИнтерфаце Ф1 индипендетементе својим модификатора, повратак тип и улазних параметара.
Слично можемо користити савете који извршава када метод заврши њено извршење (по повратку савете) правилно користећи напомена @ АфтерРетурнинг:






 @ АфтерРетурнинг (поинтцут = "извршење (* ит.мрвебмастер.аоп.МиИнтерфаце.ф2 (..))", враћају =" ретвал ")







 публиц воид афтерРетурнингФ2 (Објецт ретвал) {



  



 Систем.оут.принтлн ("ПОВРАТАК Ф2" + ретвал);







 }



Овај запис се следећи параметри, поред поинтцутс, име дато објекат враћа метод који се може дати као улазни параметар Адваита. У овом случају израз поинтцут је инвиарата осим имена метода, која у овом случају, Ф2.
Врло сличан је савет који се извршава када се метод баца изузетак (након бацање савети) користећи напомена @ АфтерТхровинг:





 @ АфтерТхровинг (поинтцут = "извршење (* ит.мрвебмастер.аоп.МиИнтерфаце.ф3 (..))", бацање =" тхровабле ")







 публиц воид афтерТхровингФ3 (Тхровабле тхровабле) {

 

  



 Систем.оут.принтлн ("Ф3 баца" + тхровабле);







 }



Разлика је у томе метод не врати објекат, али изузетак.

Други тип савет је увек извршава после метод, време је нормално или баца изузетак (након савете). Овај савет се реализује кроз коришћење @ После:






 @ После ("извршавање (* ит.мрвебмастер.аоп.МиИнтерфаце.ф4 (..))")







 публиц воид афтерФ4 () {



  



 Систем.оут.принтлн ("После Ф4");







 }



На крају видимо како да 'око савет:






 @ Око ("извршавање (* ит.мрвебмастер.аоп.МиИнтерфаце.ф5 (..))")







 публиц воид ароундФ5 (ПроцеедингЈоинПоинт ПЈП) {



  



 Систем.оут.принтлн ("пре Ф5");



  



 три {



    



 Објекат ретвал = пјп.процеед ();



    



 Систем.оут.принтлн ("ПОВРАТАК Ф5" + ретвал);



  



 } Цатцх (Тхровабле е) {



    



 Систем.оут.принтлн ("Ф5 баца" + е);



  



 }







 }



Као што можемо видети из кода поинтцут израз се не разликује од других савете. Оно што се мења је исти савет који мора експлицитно позивају на извршење методе методом класе ПроцеедингЈоинПоинт наставите, један чија је примена прошао као улаз. Овај интерфејс омогућава такође користи друге методе наставе да бисте преузели информације о методу параметрима, повратак тип и објекат на коме се извршава метод. Је препуштено читаоцу било дубље.

Да бисте тестирали нашу саветима можемо да урадимо је написати тривијалан имплементација интерфејса МиИнтерфаце, и створи главни тест:






 МиИнтерфацеИмпл {публиц цласс спроводи МиИнтерфаце





  



 @ Оверриде



  



 публиц воид Ф1 () {



    



 Систем.оут.принтлн ("Ф1");



  



 }





  



 @ Оверриде



  



 публиц воид ф2 () {



    



 Систем.оут.принтлн ("Ф2");



    



 ретурн 0;



  



 }





  



 @ Оверриде



  



 публиц инт ф3 () тхровс Екцептион {



    



 Систем.оут.принтлн ("Ф3");



    



 тхров нев Екцептион ("Изузетак Ф3");



  



 }





  



 @ Оверриде



  



 публиц воид Ф4 () тхровс Екцептион {



    



 Систем.оут.принтлн ("Ф4");



  



 }





  



 @ Оверриде



  



 публиц воид Ф5 () {



    



 Систем.оут.принтлн ("Ф5");



    



 ретурн 0;



  



 }







 }



. нелл'апплицатионЦонтект КСМЛ:





 <- Циљ:! Објекти ->







 <беан ид="миИнтерфацеИмпл" цласс="ит.мрвебмастер.аоп.МиИнтерфацеИмпл" />



Главни тест:





 публиц цласс Главни {





  



 публиц статиц воид маин (Стринг [] аргс) {





    



 / **



     



 * Инстанз МОК контејнер



     



 * /



    



 АпплицатионЦонтект АпплицатионЦонтект ЦлассПатхКсмлАпплицатионЦонтект = нове ("апплицатионЦонтект.кмл");





    



 МиИнтерфаце МиИнтерфаце = (МиИнтерфаце) апплицатионЦонтект.гетБеан ("миИнтерфацеИмпл");





    



 миИнтерфаце.ф1 ();



    



 Систем.оут.принтлн ("########## \ н ");





    



 миИнтерфаце.ф2 ();



    



 Систем.оут.принтлн ("########## \ н ");





    



 три {



      



 миИнтерфаце.ф3 ();



    



 } Цатцх (Екцептион е) {}



    



 Систем.оут.принтлн ("########## \ н ");





    



 три {



      



 миИнтерфаце.ф4 ();



    



 } Цатцх (Екцептион е) {}



    



 Систем.оут.принтлн ("########## \ н ");





    



 миИнтерфаце.ф5 ();



    



 Систем.оут.принтлн ("########## \ н ");



  



 }







 }



Пролеће Јава Водич
Е-учење
Линук (курс) Линук (курс)
Комплетан водич за опен-соурце систем. Од 49 €.
ПХП (курс) ПХП (курс)
Цео курс за креирање динамичких веб сајтова. Од 49 €.
Руби и Руби он Раилс (курс) Руби и Руби он Раилс (курс)
Израду софтвера и веб апликација са рубином и РОР. Од 39 €.
Спонсоред Линкс