1、代码示例
package com.annotation.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitName {
String value() default "";
}
package com.annotation.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitColor {
public enum Color{ BULE, RED, GREEN };
Color fruitColor() default Color.GREEN;
}
package com.annotation.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitProvider {
public int id() default -1;
public String name() default "";
public String address() default "";
}
package com.annotation.bean;
import com.annotation.annotation.FruitColor;
import com.annotation.annotation.FruitColor.Color;
import com.annotation.annotation.FruitName;
import com.annotation.annotation.FruitProvider;
public class Fruit {
@FruitName("Apple")
private String name;
@FruitColor(fruitColor=Color.RED)
private String appleColor;
@FruitProvider(id=1,name="X公司",address="A省B县")
private String appleProvider;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAppleColor() {
return appleColor;
}
public void setAppleColor(String appleColor) {
this.appleColor = appleColor;
}
public String getAppleProvider() {
return appleProvider;
}
public void setAppleProvider(String appleProvider) {
this.appleProvider = appleProvider;
}
}
package com.annotation.test;
import java.lang.reflect.Field;
import com.annotation.annotation.FruitColor;
import com.annotation.annotation.FruitName;
import com.annotation.annotation.FruitProvider;
import com.annotation.bean.Fruit;
public class Test {
@org.junit.Test
public void test() {
//Class<?>表示通配泛型,?可以代表任何类型
//返回Fruit类的Class对象
Class<?> clazz = Fruit.class;
//返回Class对象中所有的字段
Field[] fields = clazz.getDeclaredFields();
for(Field field :fields){
//isAnnotationPresent,这种方法指定注解类型的注解存在于此元素上,则返回true,否则返回false
if(field.isAnnotationPresent(FruitName.class)){
//getAnnotation,返回指定类型的注解,如果该类型注解不存在,则返回null
FruitName fruitName = (FruitName)field.getAnnotation(FruitName.class);
System.out.println(fruitName.value());
}
else if(field.isAnnotationPresent(FruitColor.class)){
FruitColor fruitColor= (FruitColor) field.getAnnotation(FruitColor.class);
System.out.println(fruitColor.fruitColor().toString());
}
else if(field.isAnnotationPresent(FruitProvider.class)){
FruitProvider fruitProvider= (FruitProvider) field.getAnnotation(FruitProvider.class);
System.out.println(fruitProvider.id()+"、"+fruitProvider.name()+"、"+fruitProvider.address());
}
}
}
}
2、输出结果
Apple
RED
1、X公司、A省B县