[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [aspectj-users] Exposing Arguments to Advice
|
Cory,
I will admit it has been a while since I have done this, but you can
expose just part of the arguments. The problem you run into which I do
not think there is a solution to is that you can not arbitrarily pick
out a n arguments that fall in the middle of the list. I once tried to
do this to no avail [and with some discussion]. What I mean by this is
the following:
public class ParametersInMethodCalls
{
public void example1(ClassX x, double I, String s)
{
}
public void example2(int I, ClassX x, double d)
{
}
public void example2(float I, String s, ClassX x)
{
}
public static void main(String[] args)
{
ParametersInMethodCalls calls = new ParametersInMethodCalls();
calls.example1(new ClassX(), 0.0d, new String("s)"));
calls.example2(0, new ClassX(), 0.0d);
calls.example2(0.0f, new String("s"), new ClassX());
}
}
And the aspect is:
public aspect RandomMethodAspect
{
pointcut examples(ClassX x) :
execution(public * ParametersInMethodCalls.*(..))
&& ( args(.., x) || args(x, ..) );
before(ClassX x) : examples(x)
{
System.out.println("Entering: " + thisJoinPoint);
}
}
The result you will see is:
Entering: execution(void
com.regular.ParametersInMethodCalls.example1(ClassX, double, String))
Entering: execution(void
com.regular.ParametersInMethodCalls.example2(float, String, ClassX))
So the method where "ClassX" is the middle parameter is lost. The
aspectj guys will have to comment on why/how this occurs. So if you
need to pickup the other one, then yes you will need to expose all
arguments.
Ron
Wilkerson, Cory wrote:
Hello All,
I'm fairly new to the world of AspectJ - quite fond of it thus far -
but, I've hit the wall WRT a particular issue; here's to hoping that a
wise AspectJ-sage can get me through.
In short, I'd like to be able to write a pointcut that looks something
like the following:
pointcut sendTransaction(TransactionManager tm, String foo):
execution(* TransactionManager.sendTransaction(String, ..))
&& target(tm) && args(foo);
Instead, based on my limited knowledge, I'm having to write (Note
argument "bar" in this example):
pointcut sendTransaction(TransactionManager tm, String foo, String bar):
execution(* TransactionManager.sendTransaction(String, String))
&& target(tm) && args(foo, bar);
I know that's probably crazy-talk but just wanted to ensure that if I
plan on exposing the arguments of a method to the advice, it's an
all-or-nothing scenario.
Thanks for any help,
Cory Wilkerson
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users