[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [aspectj-users] Newbie question about paramter exposure.
|
I just found out that in Aspectj in Action, it explains the passing context
from a join point to advice is as below:
The interpretation of context whilst using advice looks like
Object advice(String command): p(command){
...
}
1.) command passing in to pointcut p()
2.) the execution object command is passed to advice(String command)
3.) which then passes to the body {...}.
neo anderson wrote:
>
> Just want to practise to see if I understand it correctly.
>
> The point of interest
>
> A.execute("ls -alh")
>
> is reached.
>
> That point of interest is specified in
>
> execution(* example.A.execute(String)) && args(command);
>
> So the parameter value being passed in (i.e. ls -alh) is bound to the
> command
> parameter in the pointcut p(String command). Thus the value of `command'
> (in pointcut p(String command)) now can be replaced with "ls -alh" (whilst
> method's executing).
>
> And because an advice around(String command) is attached to the pointcut
> p(String command), when the method execution join point occurs, it becomes
>
> Object advice(String command): p("ls -alh"){
> ...
> }
>
> And then when advice is invoked
>
> Object advice("ls -alh"): p("ls -alh"){
> ...
> }
>
> Am I correct to the above explanation?
>
> I discover my problem is because after reading the book e.g. Aspectj in
> Action, I still do not understand very well about the flow that goes
> between joint points, pointcuts and advices. In a traditional method call,
> I understand (maybe not precisely) that in the class Main, when executing
> `new A().execute("ls -alh")', the value `ls -alh' will pass in to the
> execute() method of the class A; therefore, in the execute() function of
> the class A, the variable `command' can be replaced using the value `ls
> -alh' and gets printed using System.out.println() method in execution.
>
> But concept of aop looks like not the same way; so it makes me confused.
>
> Please correct me if anything goes wrong.
>
> Thanks for your help.
>
> I really appreciate it.
>
>
>
>
>
> Andy Clement wrote:
>>
>> Hi,
>>
>> Your description is ok:
>>
>>> therefore, execution of the method `new A().execute("ls -alh")' triggers
>>> the around() advice, which passes in a value `ls -lah' (as the variable
>>> command). That value `ls -alh' passes to
>>> pointcut p(), which also takes a variable named command. And that
>>> pointcut p() tries to capture the execution of a method specified as `*
>>> example.A.execute(String)' and its argument
>>> must be `command.'
>>
>> let me write it another way to see if that helps. Think about the
>> events that occur when the program runs:
>> Main.main() starts executing
>> it calls the Main() constructor
>> it calls the process() method
>> Main.process() method starts executing
>> it calls the A() constructor
>> it calls the execute("ls -alh") method
>> A.execute("ls -alh") method starts executing *
>> it accesses the field System.out
>> it calls the method println()
>>
>> all those are the joinpoints in your program flow and your pointcut is
>> choosing the one you are interested in. You have used 'execution(*
>> execute(String))' which has selected the one I've marked * above. In
>> your pointcut you've also said you are interested in the parameter
>> when the method executes, so you have used 'args' to bind it - so when
>> the program runs and your point of interest is reached, the parameter
>> value being passed in is bound to the command parameter in your
>> pointcut. You have chosen to have around() advice attached to that
>> pointcut so when the method-execution join point occurs, your around
>> advice is invoked with the bound parameter value. Unlike a regular
>> method call, the weaving infrastructure is looking after binding the
>> pointcut/advice parameter for you.
>>
>> Andy
>>
>>
>>
>> 2009/10/27 Neo Anderson <javadeveloper999@xxxxxxxxxxx>:
>>> Hi
>>>
>>> I am newbie to aspectj and have a question regarding to the usage of
>>> parameters exposed in the pointcut, advice, etc. Following is the source
>>> code:
>>>
>>> package aspectj;
>>>
>>> public aspect P{
>>> public pointcut p(String command): execution(*
>>> example.A.execute(String)) && args(command);
>>>
>>> Object around(String command): p(command){
>>> System.out.println("around() advice : command:"+command);
>>> return proceed(command);
>>> }
>>> }
>>>
>>> package example;
>>>
>>> public class A{
>>> public void execute(String c){
>>> System.out.println("[A.java][execute] command:"+c);
>>> }
>>> }
>>>
>>> package example;
>>>
>>> public class Main{
>>>
>>> public static void main(String args[]){
>>> new Main().process();
>>> }
>>>
>>> void process(){
>>> new A().execute("ls -alh");
>>> }
>>>
>>> }
>>>
>>> The output :
>>>
>>> around() advice : command:ls -alh
>>> [A.java][execute] command:ls -alh
>>>
>>>
>>> Thought I can get the code worked, I do not know how to explain the
>>> parameter exposed in the pointcut (e.g. p(String command)) and advice
>>> (e.g. around(String command)).
>>>
>>> What I understand is that
>>>
>>> Since the execution flow is
>>>
>>> new A().execute("ls -lah") [Main.java] -> public void execute(String c)
>>> [A.java]
>>>
>>> therefore, execution of the method `new A().execute("ls -alh")' triggers
>>> the around() advice, which passes in a value `ls -lah' (as the variable
>>> command). That value `ls -alh' passes to pointcut p(), which also takes
>>> a variable named command. And that pointcut p() tries to capture the
>>> execution of a method specified as `* example.A.execute(String)' and its
>>> argument must be `command.'
>>>
>>> Is this explanation correct?
>>>
>>> I found out there is something not right for me, but I am not aware the
>>> part that I do not understand.
>>>
>>> I appreciate any advice.
>>>
>>> Thank you very much.
>>>
>>>
>>> Send instant messages to your online friends
>>> http://uk.messenger.yahoo.com
>>> _______________________________________________
>>> 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
>>
>>
>
>
--
View this message in context: http://old.nabble.com/Newbie-question-about-paramter-exposure.-tp26077620p26230259.html
Sent from the AspectJ - users mailing list archive at Nabble.com.