Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] newbie question on within pointcut

You will need to exclude getStatisticsSource() from being advised (or add !cflowbelow(within(ApplyStatisticsDaoAllPublicMethodsAspect))

The reason you get infinite recursion is the following call sequence:
1. A method executed on dao
2. Advice executes
3. Advice calls getStatisticsSource
4. Since that is a method on dao (and its execution is not within the aspect)... go to 1

-Ramnivas

On Tue, Jul 13, 2010 at 1:40 PM, Stephen Boesch <javadba@xxxxxxxxx> wrote:
In the following aspect, the bolded methods cause infinite recursion due to re-invocation of the pointcut.  I don't get it: the pointcut conditions include


 !within(ApplyStatisticsDaoAllPublicMethodsAspect) 

So why did that not avoid the recursion?


@Aspect
public class ApplyStatisticsDaoAllPublicMethodsAspect {

@Aspect
public class ApplyStatisticsDaoAllPublicMethodsAspect {

@Around(value = "execution(public * WaterfallOrmDao+.find* (..)) && !within(ApplyStatisticsDaoAllPublicMethodsAspect) && this(dao)", argNames = "thisJoinPoint, dao")
  public Object aroundApplyStatisticsMethod (ProceedingJoinPoint thisJoinPoint, WaterfallORMDao dao)
    throws Throwable {

..
        executedMethod = ((MethodSignature)thisJoinPoint.getSignature()).getMethod();
        STATISTICS_FACTORY.getStatistics().addStatLine(dao.getManagedClass(), executedMethod, dao.getStatisticsSource(), stop - start);
     LOG.warn(dao.getManagedClass()+" "+ executedMethod+" "+ dao.getStatisticsSource()+" " + (stop - start));
 ..  


_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users



Back to the top