定义了注解,必然要去使用注解。

public class PasswordUtils {
      @UseCase(id = 47, description = "Passwords must contain at least one numeric")
      public boolean validatePassword(String password) {
          return (password.matches("\w*\d\w*"));
      }
 
      @UseCase(id = 48)
      public String encryptPassword(String password) {
          return new StringBuilder(password).reverse().toString();
      }
  }

  使用注解主要的部分在于对注解的处理,那么会涉及到注解处理器。

  从原理上讲,注解处理器是通过反射机制获取被检查方法上的注解信息,然后根据注解元素的值进行特定的处理。

public static void main(String[] args) {
     List<Integer> useCases = new ArrayList<Integer>();
     Collections.addAll(useCases, 47, 48, 49, 50);
     trackUseCases(useCases, PasswordUtils.class);
 }
 
 public static void trackUseCases(List<Integer> useCases, Class<?> cl) {
     for (Method m : cl.getDeclaredMethods()) {
         UseCase uc = m.getAnnotation(UseCase.class);
         if (uc != null) {
             System.out.println("Found Use Case:" + uc.id() + " "
                         + uc.description());
             useCases.remove(new Integer(uc.id()));
         }
     }
     for (int i : useCases) {
         System.out.println("Warning: Missing use case-" + i);
     }
 }

  Found Use Case:47 Passwords must contain at least one numeric

  Found Use Case:48 no description

  Warning: Missing use case-49

  Warning: Missing use case-50

  上面的三段代码结合起来是一个跟踪项目中用例的简单例子。

  写到这里博主想到结合枚举、注解、反射、拦截器等内容,是否可以写一套用户权限验证呢?

  将用户权限用枚举的方式给出,注解元素表明某个方法必须拥有某些权限才能调用,拦截器拦截请求方法,用户是否有权限对该方法进行调用,根据用户不同的权限进行不同的处理。欢迎讨论!