如何获取某个注解下的所有类
时间: 2023-12-19 07:08:20 浏览: 257
java 通过反射获取类上注解,方法上注解,注解里的值及方法参数
要获取某个注解下的所有类,可以使用Java Reflection API。以下是一个示例代码,假设我们要获取所有被 @Controller 注解的类:
```java
import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.List;
public class AnnotationUtils {
public static List<Class<?>> getClassesWithAnnotation(Class<? extends Annotation> annotation) {
List<Class<?>> classes = new ArrayList<>();
for (Package aPackage : Package.getPackages()) {
for (Class<?> clazz : getClassesInPackage(aPackage.getName())) {
if (clazz.isAnnotationPresent(annotation)) {
classes.add(clazz);
}
}
}
return classes;
}
private static List<Class<?>> getClassesInPackage(String packageName) {
List<Class<?>> classes = new ArrayList<>();
try {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
String path = packageName.replace('.', '/');
for (String resource : classLoader.getResource(path).getFile().split("/")) {
if (resource.endsWith(".class")) {
String className = packageName + '.' + resource.replace(".class", "");
Class<?> clazz = Class.forName(className);
classes.add(clazz);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return classes;
}
}
```
该方法会扫描项目中所有的类,如果某个类被注解 @Controller 标记,则将该类添加到列表中。调用该方法可以获取所有被 @Controller 注解的类:
```java
List<Class<?>> controllers = AnnotationUtils.getClassesWithAnnotation(Controller.class);
```
你可以根据需要修改 getClassesWithAnnotation 方法中的注解类型,以获取其他注解下的所有类。
阅读全文