3

我有一个带有实现 Bar 的接口 Foo。接口 Foo 有一个方法“doMe()”,带有一个方法注解@Secured。这是唯一安全的方法。

现在我编写了以下代码来遍历类并查找带有@Secured 的方法。(此方法尚未完成,我正在尝试通过第一个单元测试。)

  /**
   * Determine if a method is secured
     * @param method the method being checked
     * @return true if the method is secured, false otherwise
     */
    protected static boolean isSecured(Method method) {
  boolean secured = false;
  Annotation[] annotations = method.getAnnotations();
  for(Annotation annotation:annotations){
    if(Secured.class.equals(annotation.getClass())){
      secured = true;
      break;
    }
  }

  if(secured){
    return true;
  }

  return secured;
}

除了 doMe() 之外的方法在 getAnnotations() 上为 Foo 和 Bar 返回 0 个成员。问题是 doMe() 还为 Foo 和 Bar 返回 0 个成员。

我正在寻找比我更了解反射的人,因为这应该不难找到。:)

谢谢。

4

2 回答 2

6

您是否确保注释在运行时可见?您可能需要使用@Retention(RetentionPolicy.RUNTIME). 默认值 ,CLASS不会在反射方法中返回注释。

另请参阅:RetentionPolicy 文档

于 2012-10-22T15:11:36.797 回答
2

尝试使用getAnnotation而不是getAnnotations,因为getAnotations内部使用getDeclaredAnnotations.

方法(Java 平台 SE 6)中的更多详细信息

protected static boolean isSecured(Method method) {

        Secured secured = method.getAnnotation(Secured.class);

        return secured == null ? false : true;
    }
于 2012-10-22T15:35:21.177 回答