Java通过反射获取自定义注解
需要的几个jar包
1.reflections-0.9.10.jar 反射包
2.guava-15.0.jar 反射的依赖包
3.javassist-3.18.2-GA.jar 反射的依赖包自定义注解类
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Controller {
String value() default "/";
}
- 测试类1
@Controller("/test1")
public class Test1 {
}
- 测试类2
@Controller("test2")
public class Test2 {
}
- 测试类3
@Controller("/test3")
public class Test3 {
}
- 整体功能代码
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.reflections.Reflections;
public class AnnotationTest {
private static final String CONTROLLER_PACK = "com.lzy.*";
public static void main(String[] args) {
Map<String, Class> map = getControllerAnnotation();
for (Map.Entry<String, Class> m : map.entrySet()) {
System.out.println("Value:" + m.getKey() + "----" + "Class:" + m.getValue());
}
}
/**
* 获取注解的controller
*
* @return
*/
@SuppressWarnings("rawtypes")
public static Map<String, Class> getControllerAnnotation() {
Map<String, Class> result = new HashMap<String, Class>();
//指定反射扫描包
Reflections reflections = new Reflections(CONTROLLER_PACK);
//获取注解类型的set集合数据
Set<Class<?>> classes = reflections.getTypesAnnotatedWith(Controller.class);
//存储到结果集
for (Class clazz : classes) {
Controller controller = (Controller) clazz.getAnnotation(Controller.class);
String value = controller.value();
result.put(value, clazz);
}
return result;
}
}
- 运行结果