Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] passing information to a pointcut




Simon,

The this, target and args pointcuts are sufficient to expose all context
available at a joint point. The log object you are trying to obtain is not
a property of the joint point but rather a field defined by a property of
the join point i.e. this. In a simplified version the Log object is
obtained through a template method:

public abstract aspect AbstractAspect2 {

    protected abstract Log getLog();

    protected abstract pointcut beforeTrace();

    before() : beforeTrace() {
        Log l = getLog();
        if (l.isEnabled()) l.log("Before.");
    }

}

public aspect Aspect2 extends AbstractAspect2 {
    private static Log testLog = new Log(true, "Test");

    protected Log getLog() {
            return testLog;
    }

    protected pointcut beforeTrace() : beforeTraceTest()
       || beforeTraceTest2();

      pointcut beforeTraceTest() :
       execution(* Test.doSome(..));

      pointcut beforeTraceTest2() :
        execution(* Test2.doSome(..));

}

However you have a secondary concern which is to use a different Log object
of each class. For a solution to your problem see my posting wrt the new
pertypewithin() feature of AspectJ 5:
http://dev.eclipse.org/mhonarc/lists/aspectj-dev/msg01261.html.

Matthew Webster
AOSD Project
Java Technology Centre, MP146
IBM Hursley Park, Winchester,  SO21 2JN, England
Telephone: +44 196 2816139 (external) 246139 (internal)
Email: Matthew Webster/UK/IBM @ IBMGB, matthew_webster@xxxxxxxxxx
http://w3.hursley.ibm.com/~websterm/

Simon Heinzle <simon.heinzle@xxxxxxxxxx>@eclipse.org on 13/04/2005 14:51:11

Please respond to aspectj-users@xxxxxxxxxxx

Sent by:    aspectj-users-bounces@xxxxxxxxxxx


To:    aspectj-users@xxxxxxxxxxx
cc:
Subject:    Re: [aspectj-users] passing information to a pointcut


Hi all,

I want to share the workaround i found for the my problem:
(note the abstract aspect will work as Logging - Handling Layer whereas
the concrete aspect will just contain Logger-Instances & pointcuts)

public abstract aspect AbstractAspect {
         private static Log logref;

         public static boolean setLog(Log l) {
                 logref = l;
                 return l.isEnabled();
         }

         abstract pointcut beforeTrace();

         before() : beforeTrace() {
                 logref.log("Before.");
         }
}

public aspect Aspect extends AbstractAspect {
         private static Log testLog = new Log(true, "Test");
         private static Log test2Log = new Log(true, "Test2");

         pointcut beforeTrace() : beforeTraceTest()
                         || beforeTraceTest2();

         pointcut beforeTraceTest() :
                         execution(* Test.doSome(..))
                         && if (setLog(testLog));
         pointcut beforeTraceTest2() :
                          execution(* Test2.doSome(..))
                         && if (setLog(test2Log));

}


I'm not happy with this solution as it involves a method call & the
target application is Logging (which in case of debug disabled) is quite
time critical. However the JIT may optimize that away.

Perhaps some of you see another way to do such a thing?

Regards,
Simon


Simon Heinzle wrote:
> Hi everybody,
>
> is there a possibility to pass information other than args() and this()
> and alike to a pointcut?? For example like
>
> pointcut logPointcut(Object thiz, Object logger) :
>     call (* *..Clazz.method(..) && this(thiz) && logger(myLogger);
>                                                      \--------------/
> (something like this) ---------------------------------------^
>
> Didn't find any information on that...
>
> Thanks,
> Simon
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users


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




Back to the top