Java 自定义注解简单使用
第一步:在 pom.xml 下引入反射框架
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.10.2</version>
</dependency>
第二步:自定义注解
package com.zibo.api.annotation;
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)
// 配置类注解,value默认为当前类的类名(Pascal命名法:单词首字母大写)
public @interface MyConfig {
String value() default "";
}
第三步:写两个测试实体类
Dog
package com.zibo.api.entity;
import com.zibo.api.annotation.MyConfig;
@MyConfig("dog")
public class Dog {
}
Cat
package com.zibo.api.entity;
import com.zibo.api.annotation.MyConfig;
@MyConfig("cat")
public class Cat {
}
第四步:写个工具类扫描被注解的类(核心)
package com.zibo.api.utils;
import com.zibo.api.annotation.MyConfig;
import org.reflections.Reflections;
import java.util.LinkedHashMap;
import java.util.Set;
public class MyConfigUtil {
private MyConfigUtil() {}
public static final LinkedHashMap<String, String> configNameAndClassNameMap;
static {
configNameAndClassNameMap = new LinkedHashMap<>();
// 要扫描的包
String packageName = "com.zibo.api.entity";
Reflections f = new Reflections(packageName);
// 获取扫描到的标记注解的集合
Set<Class<?>> set = f.getTypesAnnotatedWith(MyConfig.class);
for (Class<?> c : set) {
// 循环获取标记的注解
MyConfig myConfig = c.getAnnotation(MyConfig.class);
String value = myConfig.value();
if ("".equals(value)) {
String[] split = c.getName().split("\\.");
String name = split[split.length-1];
configNameAndClassNameMap.put(name, c.getName());
} else {
configNameAndClassNameMap.put(myConfig.value(), c.getName());
}
}
}
}
第五步:代码演示
package com.zibo.api;
import com.zibo.api.utils.MyConfigUtil;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class MyConfigTest {
@Test
public void test() {
MyConfigUtil.configNameAndClassNameMap.forEach((k, v) ->{
System.out.println("k -- " + k);
System.out.println("v -- " + v);
});
}
}
第六步:运行结果
k -- cat
v -- com.zibo.api.entity.Cat
k -- dog
v -- com.zibo.api.entity.Dog