当前位置:   article > 正文

java随笔-扫描使用指定注解的类与方法

扫描这个对象上的注解

前几天项目中让扫描出所有使用Restful API的方法。刚开始还想着用python过滤关键字来查找的,后来想想可以使用反射来搞的。主要包含以下三个步骤:

  1. 根据包名解析包的具体路径
  2. 查找指定包下指定注解的类
  3. 在上一步骤中得到的类中,依次扫描包含指定注解的方法

想着写着工具类的形式,代码结构如下:

  1. public class AnnotationScannerUtils {
  2. private static final Logger logger = LoggerFactory.getLogger(AnnotationScannerUtils.class);
  3. private static final String EXT = "class
  4. /**
  5. * 根据包名获取包的URL
  6. * @param pkgName com.demo.controller
  7. * @return
  8. */
  9. public static String getPkgPath(String pkgName){
  10. String pkgDirName = pkgName.replace('.', File.separatorChar);
  11. URL url = Thread.currentThread().getContextClassLoader().getResource(pkgDirName);
  12. return url == null ? null : url.getFile();
  13. }
  14. /**
  15. * 获取指定包下所有类对象的集合
  16. * @param pkgName 包名(com.demo.controller)
  17. * @param pkgPath 包路径(/Users/xxx/workspace/java/project/out/production/classes/com/demo/controller)
  18. * @param recursive 是否递归遍历子目录
  19. * @return 类集合
  20. */
  21. public static Set<Class<?>> scanClasses(String pkgName, String pkgPath, final boolean recursive){
  22. Set<Class<?>> classesSet = new HashSet<>();
  23. Collection<File> allClassFile = getAllClassFile(pkgPath, recursive);
  24. for (File curFile : allClassFile){
  25. try {
  26. classesSet.add(getClassObj(curFile, pkgPath, pkgName));
  27. } catch (ClassNotFoundException e) {
  28. logger.error("load class fail", e);
  29. }
  30. }
  31. return classesSet;
  32. }
  33. /**
  34. * 获取指定包下包含指定注解的所有类对象的集合
  35. * @param pkgName 包名(com.demo.controller)
  36. * @param pkgPath 包路径(/Users/xxx/workspace/java/project/out/production/classes/com/demo/controller)
  37. * @param recursive 是否递归遍历子目录
  38. * @param targetAnnotations 指定注解
  39. *
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/240358
推荐阅读
相关标签
  

闽ICP备14008679号