Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[aspectj-users] How to use a constructor pointcut in a pertarget aspect

Hi,

I'm trying to log read and write accesses with aspectJ.
To do this, I want to capture the constructor calls, read and write calls and close calls of, for example, RandomAccessFile objects.
The logged data shall be saved inside the aspect. For this reason, I want to use pertarget to capture constructor invocations. The problem is, that the used pointcut doesn't seem to work; neither an aspect instance is created, nor the advice for the constructor is used; i get a "advice has not been applied" message.

These are the pointcuts used to capture the constructor calls.

public pointcut randomAccessFileCreation() : call(RandomAccessFile.new(..));
public pointcut writerCreation() : (call(FileWriter.new(..)) || call(PrintWriter.new(File,..)) || call(PrintWriter.new(String,..)));

These pointcuts (and more, for example readerCreation() following the same principle) are joined with the newAspect() pointcut:

public pointcut newAspect() : writerCreation() || randomAccessFileCreation();


The aspect is defined like this:
public privileged aspect loggingAspect pertarget(newAspect()){


The advice belonging to the newAspect() pointcut:
    after() returning(Object obj) : newAspect(){
        boundTo = obj;
        System.err.println("new Object " + boundTo);
        log.setTimeOpen(Calendar.getInstance().getTime());
        }
    }

In the constructor of the aspect, i print a log message, too.

None of the log messages is printed during the execution of the program.

What am i doing wrong here?

Thanks

Christoph

Back to the top