【问题标题】:Take method argument as an argument in the annotation in Java 8在 Java 8 的注解中将方法参数作为参数
【发布时间】:2020-11-25 11:33:09
【问题描述】:

我查了一下,到现在为止似乎都不可能,那么,如果是这样的话,满足以下要求的最佳选择是什么?

@Authentication_Annotation(id, password)
public void method(String id, String password, String param) {
    // Does something if ID and Password are correct.
}

来自 python 背景,使用装饰器可以做到这一点。 我们是否仍然可以在 java 中做到这一点,而无需在每次需要为方法提供身份验证时调用进行身份验证的方法?

【问题讨论】:

  • 我不清楚你在问什么。正如您自己所说,您不能在注释中使用方法。您用于注释的语法错误;它们必须是编译时常量。我也看不出如何将“id”或“password”解释为一种方法。
  • 甚至不清楚您为什么要这样做。该注释的预期效果是什么?这个注解不在任何地方使用,对于whatever you actually want to do,将使用注解而不是方法参数的位置更改为只使用方法参数是更简单的解决方案。
  • 你可能想看看 AOP,例如与 AspectJ:medium.com/@hasithalgamge/annotations-with-aspect-e2942dc9161c。这样您就可以在实际调用 method 之前访问参数并验证它们。
  • @Michael 我的意思是,方法参数。
  • 注释只是元信息。注释不会做任何事情。注释不会从服务中获取某些内容,并且注释不会执行检查。实际代码就可以了。根据该代码的组织方式,它可能能够搜索带注释的方法,因此将方法标记为旨在具有密码保护的方法是可以的。试图将方法参数带入注释是没有意义的。注释不做任何事情,因此,它不需要接收参数。

标签: java oop java-8 annotations java-annotations


【解决方案1】:

您可以直接在注释中访问方法参数,而不是将其作为参数显式传递。

使用 AOP: Get method arguments using Spring AOP?

无论如何,似乎还有另一种通过使用 DynamicProxy 进行反射的方法: Java method missing (ala Ruby) for decorating?

【讨论】:

    【解决方案2】:

    这在 Java 中是不可能的(至少没有大量非常黑暗的黑魔法)。

    【讨论】:

      猜你喜欢
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      • 2017-08-21
      相关资源
      最近更新 更多