java-如何将注释应用于某些方法调用

时间:2018-10-17 21:55:17

标签: java annotations

我想对某些方法调用应用注释,以便我可以告诉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();
          }
        }

2 个答案:

答案 0 :(得分:0)

我认为您无法做到这一点,如果您想这样做,那么您应该重新考虑代码的组织方式。

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

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

答案 1 :(得分:0)

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