У меня есть приложение grails, и я добавил совет @After по методу обслуживания grails
class OrderManagementService {
static transactional = true
public void confirmOrder() {
}
}
@Aspect
public class NotVeryUsefulAspect {
@Pointcut("execution(* OrderManagementService.confirmOrder())")
public void orderManagementConfirmOrder(){}
@After("orderManagementConfirmOrder()")
public void doSomething(){
System.out.println("My First Advice is working :-)");
}
@Around("orderManagementConfirmOrder()")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("Around Method Invoked");
return pjp.proceed();
}
}
, однако, когда этот метод выполняется, оба совета вызываются дважды, поэтому в выводе, который я имею
Метод Around, вызванный Метод Around, вызванный Мой первый совет работает :-) Мой первый совет работает: -)
Я думаю, что это связано с прокси CGLIB сервисов Grails
это мой resource.xml
aop:aspectj-autoproxy proxy-target-class="false"
bean id="myAspect" class="org.xyz.NotVeryUsefulAspect"
aop:config proxy-target-class="true"
внутри xml
кто-нибудь сталкивался с этим и есть решение, чтобы заставить его работать правильно ура