封装注解处理器实例

99 阅读1分钟

定义注解接口

FruitProvider注解接口,nameaddress两个属性

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitProvider {
    public int id() default -1;
    public String name() default "";
    public String address() default "";
}

使用注解接口

定义了Apple类,通过注解方式定义了一个FruitProvider

public class Apple {
    @FruitProvider (id = 1, name = "山东红富士集团", address = "山东省烟台市");
    private String appleProvider;
    public void setAppleProvider(String appleProvider) {
        this.appleProvider = appleProvider;
    }
    public String getAppleProvider() {
        return appleProvider;
    }
}

定义注解处理器

public class FruitInfoUtil {
    public static void getFruitInfo(Class<?> clazz) {
        String strFruitProvicer = "供应商信息:";
        Field[] fields = clazz.getDeclaredFields();
        for(Field field : fields) {
            if(field.isAnnotationPresent(FruitProvider.class)) {
                FruitProvider fruitProvider = (FruitProvider)
                        field.getAnnotation(FruitProvider.class);
                        strFruitProvicer += "供应商编号: "+ fruitProvider.id() +"供应商名称: "+ 
                                fruitProvider.name() +"供应商地址: "+ fruitProvider.address();
                        System.out.println(strFruitProvicer);
            }
        }
    }
}
public class FruitRun {
    public static void main(String[] args) {
        FruitInfoUtil.getFruitInfo(Apple.class);
    }
}