AspectJ - pointcut for methods of interface's implementation

风流意气都作罢 提交于 2020-05-28 20:07:33

问题


I have several implementations of SomeInterface. The question is what is the pointcut for the method executeSomething in all implementation of SomeInterface.

public class SomeImplementation implements SomeInterface {

    public String executeSomething(String parameter) {
        // Do something
    }

}

public class AnotherImplementation implements SomeInterface {

    public String executeSomething(String parameter) {
        // Do something different way
    }

}

回答1:


Pointcuts for that method can be either method-execution or method-call pointcuts. The most specific pointcuts for your requirement would look like this:

execution(public String SomeInterface+.executeSomething(String))
call(public String SomeInterface+.executeSomething(String))

Some explanation on these pointcut types:

  • the type pattern used in both these pointcuts mean: all public methods that return String that are defined in SomeInterface or any subtype of it, being named executeSomething and accepting a single String argument. This is the most specific type pattern that can be defined for your case and it will match only implementations of the String SomeInterface.executeSomething(String) method.
  • execution type pointcuts match join points that correspond to when a particular method body is executed
  • call type pointcuts match join points that correspond to when a particular method is called (i.e. the join point is located at the caller side)

Execution type pointcuts are used more often, but call type pointcuts are very useful too in some cases.

See The AspectJ Language/Join Points and Pointcuts chapter in the AspectJ Programming Guide for further reference.



来源:https://stackoverflow.com/questions/47967180/aspectj-pointcut-for-methods-of-interfaces-implementation

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!