This week's book giveaway is in the Clojure forum.
We're giving away four copies of Clojure in Action and have Amit Rathore and Francis Avila on-line!
See this thread for details.
Win a copy of Clojure in Action this week in the Clojure forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Spring AOP: How can I create pointcut for middle argument ?

 
Boris Romashov
Ranch Hand
Posts: 38
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
If argument is unique - I can write:

If argument is first:

If argument is last:

But if it is in the middle the following fails:


How can I do it ?
 
Mark Spritzler
ranger
Sheriff
Posts: 17276
6
IntelliJ IDE Mac Spring
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
It might work with a specific type.

So if you have a possible joinpoint like

public void doSomething(String s, Integer i, Order order)

args(anArg)

@Pointcut (value = "args(anArg)")
private void pointcut(Integer anArg) {}

Then Spring would use reflection and see that you are referring to the second argument of doSomething, by examining its type.

Mark
 
Boris Romashov
Ranch Hand
Posts: 38
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Mark Spritzler wrote:

As I wrote in first message, your version points only to methods with unique argument.
That is not what I need.
 
Mark Spritzler
ranger
Sheriff
Posts: 17276
6
IntelliJ IDE Mac Spring
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
How about

args(*, myObject, ..)

Mark
 
Boris Romashov
Ranch Hand
Posts: 38
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Mark Spritzler wrote:How about
args(*, myObject, ..)

This only works when myObject is second argument.
 
Mark Spritzler
ranger
Sheriff
Posts: 17276
6
IntelliJ IDE Mac Spring
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
So then what exactly do you mean by middle parameter? How many parameters?

If ther eis nothing to grab onto, some pattern, that is where I find creating my own Annotation and creating a Pointcut that matches the methods. But I think that might still nto completely solve your problem, which only leaves creating pointcuts that combine pointcuts with &&(and), || (not), ! (or)

Mark
 
Boris Romashov
Ranch Hand
Posts: 38
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Mark Spritzler wrote:So then what exactly do you mean by middle parameter?

Middle means anything except of first and last - no matter how many parameters are present.

Creating annotation and marking all methods that fit my requirement is a solution with some limitations.
What if there are a lot of methods? If my pattern changes I need to look through all annotated methods.
What if these methods are not in my classes (that's why I cannot edit them).
So I want to do it in by one pointcut without editing classes.
Besides, this information can be successfully calculated without any marking. When argument is first and last it is very easy.
Why this cannot be easy for middle argument?
 
ah habibi
Greenhorn
Posts: 6
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Boris Romashov,

Did you get a solution for this issue ? Please update.

I came up with a workaround for this. Since i know the number of arguments the method (inherited from interface) will take, i used * in place of other arguments and named the parameter of my concern. Then i was able to use it.

like


this worked for me.

Please update if you have found a way to fix this, if the number of arguments is unknown.


Thanks
 
It is sorta covered in the JavaRanch Style Guide.
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic