您的位置:首页 > 编程语言 > Java开发

Java通过反射获取自定义注解

2017-11-02 17:26 721 查看

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;
}
}


运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java