我正在编写一个插件,可以在编译时扫描我项目的代码,并找到控制器以确保它们具有我创建的其他自定义注释。
由于某些原因,Spring的所有注释都不会出现在
的注释数组中Class<?> clazz = classInfo.load();
Annotation[] annotations = clazz.getAnnotations();
为什么此数组中缺少spring注释?在哪里可以找到他们?
这是我的相关代码:
URL[] urls;
List<URL> listOfURL = new ArrayList<>();
SourceSetContainer ssc = getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets();
File classesDir = ssc.getByName("main").getOutput().getClassesDir();
listOfURL.add(classesDir.toURI().toURL());
urls = listOfURL.toArray(new URL[0]);
final ClassLoader loader = new URLClassLoader(urls);
ClassPath classpath = ClassPath.from(loader); // scans the class path used by classloader
for (ClassPath.ClassInfo classInfo : classpath.getTopLevelClassesRecursive(packageName)) {
if (classInfo.getName().toLowerCase().contains("controller")) {
Class<?> clazz = classInfo.load();
if (clazz.isAnnotationPresent(RestController.class)) {
Method[] methods = clazz.getMethods();
for (Method method : methods) {
doSomething(clazz, method);
}
}
}
}
这是我的一个控制器的示例:
@RestController
@RequestMapping(path = "api/v2/users/me/likes")
public class LikesController {
@Deprecated
@GetMapping
public ResponseEntity getUserLikes(){
return ResponseEntity.ok(LikesResource.builder().build());
}
}
在我的插件中,注释数组为空。只是为了进行测试,我在上面添加了“已弃用”注释,它已经存在,但仍然没有Spring的注释...