深入理解Java注解处理器

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县


源码: https://github.com/vinegar93/Study/tree/master/Annotation01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值