使用AspectJ根据类型隔离具有相同名称的方法?

时间:2019-02-14 03:21:44

标签: java aspectj

说我在function myNewFunction(e) { e.preventDefault() var e = document.getElementById('user.attributes.countryId'); var inpCountry = e.options[e.selectedIndex]; console.log(inpCountry.innerHTML.trim()); }方法上有一个切入点。

<form action="">
  <select class="form-control regist-user-input" id="user.attributes.countryId" name="user.attributes.countryId" required>
    <option value="">Country</option>
    <option value="1">
      AFGHANISTAN
    </option>
    <option value="2">
      ALAND ISLAND
    </option>
    <option value="3">
      ALBANIA
    </option>
    <option value="4">
      ALGERIA
    </option>
    <option value="5">
      AMERICAN SAMOA
    </option>
    <option value="6">
      ANDORRA
    </option>
    <option value="7">
      ANGOLA
    </option>
    <option value="8">
      ANGUILLA
    </option>
    <option value="9">
      ANTARCTICA
    </option>
    <option value="10">
      ANTIGUA AND BARBUDA
    </option>
  </select>
  <br><br>
  <input type="submit" onClick="myNewFunction(event)">
</form>

但是我只想捕捉一些run实例。例如:

run()

如何更改切入点以忘记不是来自线程的pointcut run(): execution(public void *.run()); before(): run() { // do something with run }

2 个答案:

答案 0 :(得分:1)

如果您想建议Runnable.run()方法的所有实现,除非提供该run方法的实现的类是TimerTask的子类,则可以使用以下切入点表达式有效地完成此操作:

execution(public void Runnable+.run()) && !execution(public void java.util.TimerTask+.run());

答案 1 :(得分:0)

编辑:在下面的代码运行时,请检查Nándor Előd Fekete接受的答案,因为它效率更高。

AspectJ Cookbook很容易推断出解决方案:

pointcut run(): execution(public void *.run()) && !target(java.util.TimerTask);
before(): run() {
    // do something with run, will not catch instances of TimerTask
}