..


Рекламные ссылки

АОП - Формат Создать

Теперь давайте посмотрим, как создать аспект.
В первую очередь мы создаем интерфейс, на котором примере мы будем писать наши pointcuts:






 открытый интерфейс MyInterface {





  



 общественных f1 недействительными ();





  



 общественных Int f2 ();





  



 общественных Int f3 () бросает исключение;





  



 общественных f4 недействительными () бросает исключение;





  



 общественных Int f5 ();







 }



Чтобы написать Pointcut должны знать AspectJ Pointcut обозначений , в наших примерах мы будем использовать только исполнение, которое соответствует методов соединения точку выполнения.
Формат выполнения выражения типа:
 



 исполнения (модификаторы образца? Объявление отставке типа образца типа образца? имя-шаблон (пара-шаблон) бросает образца?)

 
где:
  • модификаторы-схеме: параметры, применяя дополнительный модификатор указывает тип метода. * Соответствует значению всех типов модификаторов.
  • RET-типа-модель: она указывает тип возвращаемого значения метода. Значение * соответствует всем типам возвращения.
  • Объявление типа-схеме: выбор параметра, указывает класс, который объявляет метод. * Значение используется в качестве джокера, чтобы заменить полностью имя класса или его часть.
  • имя-шаблон: имя метода. * Значение используется в качестве джокера, чтобы заменить полностью имя метода или его часть.
  • пара-схеме: указывает параметры метода. Значение () указывает на метод, который не принимает параметров, в то время как значение (..) указывает метод, который принимает ноль или более параметров. * Значение используется в качестве джокера, чтобы заменить параметр типа метода, например, (*, java.lang.String) соответствует метод, который принимает в качестве входных данных два параметра в первом любого типа, второй тип String.
  • бросает-схеме: необязательный параметр указывает тип исключение методом, например, бросает java.lang.Exception
Чтобы лучше понять, синтаксис, мы начнем с примера.

Сначала мы должны создать наш собственный аспект:






 @ Аспект







 {Общественного класса MyAspect



  



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







 }



Как мы видим класс с аннотацией @ аспект. Этого недостаточно, потому что вы должны включить поддержку АОП nell'applicationContext Xml.:





 <! - ENBLING AspectJ ->







 <aop:aspectj-autoproxy />









 <! - MYASPECT ->







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



После того как вы сделали эти две операции готовы создать совет, например, действие, выполняемое перед выполнением метода f1 (до консультации):






 @ Before ("исполнение (* it.mrwebmaster.aop.MyInterface.f1 (..))")







 общественных beforeF1 недействительными () {



  



 System.out.println ("ДО F1");







 }



Как видно из кода, который мы использовали @ Перед аннотацией, которая принимает выражение, значение, которое идентифицирует Pointcut. В нашем примере, выражение соответствует все методы, которые называются интерфейсом it.mrwebmaster.aop.MyInterface f1 indipendetemente их модификаторы, тип возвращаемого значения и входных параметров.
Аналогичным образом мы можем использовать совет, который выполняется, когда метод завершает свое выполнение (после возвращения совет) правильно с помощью аннотации @ AfterReturning:






 @ AfterReturning (Pointcut = "исполнения (* it.mrwebmaster.aop.MyInterface.f2 (..))", возвращения =" RETVAL ")







 общественных afterReturningF2 недействительным (Object RETVAL) {



  



 System.out.println ("ВОЗВРАТ F2" + RETVAL);







 }



Эта запись имеет следующие параметры, в дополнение к pointcuts, имя, данное объект, возвращаемый методом, который может быть задан как входной параметр Адвайты. В этом случае выражение Pointcut является inviarata кроме названия метода, который в данном случае, f2.
Очень похоже является совет, который выполняется, когда метод генерирует исключение (бросив совет) с помощью аннотации @ AfterThrowing:





 @ AfterThrowing (Pointcut = "исполнения (* it.mrwebmaster.aop.MyInterface.f3 (..))", бросая =" Throwable ")







 общественного недействительными afterThrowingF3 (Throwable Throwable) {

 

  



 System.out.println ("F3 бросает" + Throwable);







 }



Разница в том, что метод не возвращает объект, но исключение.

Другой тип советы всегда выполняется после того, метод, пришло время нормально или выдает исключение (после консультации). Этот совет реализуется через использование @ После:






 После @ ("исполнение (* it.mrwebmaster.aop.MyInterface.f4 (..))")







 общественных afterF4 недействительными () {



  



 System.out.println ("ПОСЛЕ F4");







 }



Наконец мы видим, как сделать "вокруг совет:






 @ Around ("исполнение (* it.mrwebmaster.aop.MyInterface.f5 (..))")







 общественного недействительными aroundF5 (ProceedingJoinPoint PJP) {



  



 System.out.println ("ДО F5");



  



 попробуйте {



    



 Объект RETVAL = pjp.proceed ();



    



 System.out.println ("ВОЗВРАТ F5" + RETVAL);



  



 } Catch (Throwable д) {



    



 System.out.println ("F5 бросает" + е);



  



 }







 }



Как видно из кода Pointcut выражение не отличается от других советов. Какие изменения это тот же самый совет, который должен явно вызывать выполнение метода с помощью метода класса ProceedingJoinPoint продолжить, чья заявка передается в качестве входных данных. Этот интерфейс обеспечивает также использует и другие методы перейти для получения информации о методе параметров, тип возвращаемого значения и объект, на котором метод выполняется. Это читателю глубже.

Чтобы проверить наши советы мы можем сделать, это написать тривиальной реализации интерфейса MyInterface, а также создавать основные испытания:






 MyInterfaceImpl {общественных класс реализует MyInterface





  



 @ Override



  



 общественных f1 недействительными () {



    



 System.out.println ("F1");



  



 }





  



 @ Override



  



 общественных Int f2 () {



    



 System.out.println ("F2");



    



 возврат 0;



  



 }





  



 @ Override



  



 общественных Int f3 () бросает исключение {



    



 System.out.println ("F3");



    



 бросать новые Exception ("Исключение F3");



  



 }





  



 @ Override



  



 общественных f4 недействительными () бросает исключение {



    



 System.out.println ("F4");



  



 }





  



 @ Override



  



 общественных Int f5 () {



    



 System.out.println ("F5");



    



 возврат 0;



  



 }







 }



. nell'applicationContext XML:





 <! - Цель: Object ->







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



Основной тест:





 общественного класса Главная {





  



 государственной статической силы основных (String [] агдз) {





    



 / **



     



 * Instanz IoC контейнер



     



 * /



    



 ApplicationContext ApplicationContext ClassPathXmlApplicationContext = новый ("applicationContext.xml");





    



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





    



 myInterface.f1 ();



    



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





    



 myInterface.f2 ();



    



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





    



 попробуйте {



      



 myInterface.f3 ();



    



 } Catch (Исключение е) {}



    



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





    



 попробуйте {



      



 myInterface.f4 ();



    



 } Catch (Исключение е) {}



    



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





    



 myInterface.f5 ();



    



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



  



 }







 }



Весна Java Руководство
E-Learning
Linux (курс) Linux (курс)
Полное руководство по открытым исходным кодом системы. От 49 €.
PHP (курс) PHP (курс)
Полный курс для создания динамических веб-сайтов. От 49 €.
Руби и Ruby On Rails (курс) Руби и Ruby On Rails (курс)
Создание программного обеспечения и веб-приложений с Рубином и RoR. С 39 €.
Рекламные ссылки