【问题标题】:java - how to apply an annotation to certain method callsjava - 如何将注释应用于某些方法调用
【发布时间】:2018-10-17 21:55:16
【问题描述】:

我想对某些方法调用应用注释,以便我可以告诉 aspectj 修改这些调用的执行。

public interface Door {
  void open() throws DoorException;
  void close() throws DoorException;
}

public class Ferrari {
  @Inject @Lightweight Door door;

  public void drive() {
    open();

    close();

    open();
  }
}

在这种情况下,我希望所有打开/关闭操作都以相同的方式有效地包装,但如果我想让一个行为不同怎么办?

我想做这样的事情:

public class Ferrari {
      @Inject Door door;

      public void drive() {
        door.open();

        door.close();

        @Slowly door.open();
      }
    }

我意识到我不能在那里放置注释,但同时,我不想破坏开放签名以传递可选的元数据。

最好的方法是什么?

我可以这样做:

public class Ferrari {
          @Inject Door door;

          public void drive() {
            door.open();

            door.close();

            ((@Slowly Door)door).open();
          }
        }

【问题讨论】:

    标签: java annotations


    【解决方案1】:

    我不认为你能做到这一点,如果你想这样做,也许你应该重新考虑你的代码组织方式。

    我不确定您为什么要这样做,但一种猜测是,也许对于一辆特定的法拉利,您想以另一种方式打开车门。然后,您可以为特定模型扩展 Ferrari 类,并为 Door 接口使用不同的实现。 我认为,您可以通过在 spring 中使用限定符或在 Java ee 中使用 @Named 来做到这一点。

    如果有帮助,下面的链接中有类似的答案。 Injecting multiple implementations to a single service in Spring

    【讨论】:

      【解决方案2】:

      我计划使用 2 个方面,1 将某些方法标记为“特殊”,然后在注册表中放置一个标志,第二个将包装对给定接口的所有调用并查看注册表以查看是否标志已设置。

      【讨论】:

        猜你喜欢
        • 2021-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-12
        相关资源
        最近更新 更多