Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #12337

Re: Basic AspectJ Question

Date 2012-02-25 18:04 -0500
From Arne Vajhøj <arne@vajhoej.dk>
Newsgroups comp.lang.java.programmer
Subject Re: Basic AspectJ Question
References <XnsA0049AF13CD2Djpnasty@94.75.214.39>
Message-ID <4f4968eb$0$295$14726298@news.sunsite.dk> (permalink)
Organization SunSITE.dk - Supporting Open source

Show all headers | View raw


On 2/25/2012 3:07 PM, Novice wrote:
> I'm finding AspectJ very hard to get into, mostly because the manual
> (AspectJ Language Guide) seems very weak to me.
>
> For example, a construct they use all the time in examples is "target()".
> Clearly, this is an important thing. But I'm darned if I can find
> anything in the manual that actually says what "target()" is or does!
> They just seem to assume that it's obvious. But I've got a pretty good
> imagination and I can imagine lots of things it might be, each of which
> has different implications and significance....
>
> Can anyone enlighten me on what "target()" does? Even just an indication
> of where it is explained in the manual would be fine. A link to a better
> manual or tutorial on AspectJ, if there is such a thing, would also be
> greatly appreciated.

Have you looked at the example at:

doc/faq.html#q:interfacesastypepatterns

?

> And if anyone is aware of a manual or tutorial that explains how to do X
> in Aspect J where there is a long list of X's, that would be REALLY
> helpful. For instance, I'd like to write an "entering" log entry for each
> method (and constructor) as I execute it and I want that log entry to
> include the name of the class and method so I need a pointcut and advice
> that is able to determine the class name and method name that is being
> executed so that I can put it in the logging statement. I'm picturing
> something like:
>
> pointcut entering() : execution ( * * (..));
>
> before() : entering() {
>      	this.logger.entering(className, methodName);
>        }
>
> I know that some context information is available in each method but I'm
> not sure how to get the class and method names so that I can put them in
> the advice.
>
> That's why I'd love to find a "How to do X" list with lots of different
> X's in it. With a bit of luck, what I'm trying to do would be on the list
> and I get to what I want to do a little more quickly than churning
> through the Language Guide...

Reading the docs and google a bit is sufficient for most AspectJ
questions.

Regarding the specific question the the JoinPoint instance
has the necessary info.

Example from my shelf:

import java.lang.reflect.*;

import org.aspectj.lang.*;
import org.aspectj.lang.annotation.*;

@Aspect
public class Trace {
     @Pointcut("call(public * IntMath.*(..)) || call(public * 
DoubleMath.*(..))")
     public void mathtrace() { };
     @Before("mathtrace()")
     public void enter(JoinPoint thisJoinPoint) {
         System.out.println("Enter " + thisJoinPoint.getSignature());
     }
     @AfterReturning("mathtrace()")
     public void leave(JoinPoint thisJoinPoint) {
         System.out.println("Exit " + thisJoinPoint.getSignature());
     }
}

(this example only trace methods in two specific classes, but ...)

Check:
 
http://www.eclipse.org/aspectj/doc/next/runtime-api/org/aspectj/lang/JoinPoint.html
to see what you can get out.

Arne




Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Basic AspectJ Question Novice <novice@example..com> - 2012-02-25 20:07 +0000
  Re: Basic AspectJ Question Arne Vajhøj <arne@vajhoej.dk> - 2012-02-25 18:04 -0500
    Re: Basic AspectJ Question Novice <novice@example..com> - 2012-02-26 01:43 +0000
  Re: Basic AspectJ Question Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-02-25 21:52 -0400
    Re: Basic AspectJ Question Novice <novice@example..com> - 2012-02-26 14:34 +0000

csiph-web