..
Теперь давайте посмотрим, как создать аспект.
В первую очередь мы создаем интерфейс, на котором примере мы будем писать наши pointcuts:
открытый интерфейс MyInterface {
общественных f1 недействительными ();
общественных Int f2 ();
общественных Int f3 () бросает исключение;
общественных f4 недействительными () бросает исключение;
общественных Int f5 ();
}
Чтобы написать Pointcut должны знать AspectJ Pointcut обозначений , в наших примерах мы будем использовать только исполнение, которое соответствует методов соединения точку выполнения.
исполнения (модификаторы образца? Объявление отставке типа образца типа образца? имя-шаблон (пара-шаблон) бросает образца?)где:
Сначала мы должны создать наш собственный аспект:
@ Аспект
{Общественного класса 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 (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 ("########## \ п ");
}
}
| |
Linux (курс)
Полное руководство по открытым исходным кодом системы. От 49 €. |
| |
PHP (курс)
Полный курс для создания динамических веб-сайтов. От 49 €. |
| |
Руби и Ruby On Rails (курс)
Создание программного обеспечения и веб-приложений с Рубином и RoR. С 39 €. |