自定义注解实践

背景介绍

注解在java中是个比较重要的概念。几乎所有框架中都自定义了相当数量的注解。

定义注解

在下面的定义注解的代码中,@interface就指明这是在定义注解。同时在定义注解时,我们使用了几个元注解。其中,Target表示该注解用于什么地方,可能的值在枚举类 ElemenetType 中,这里表示注解用于方法上。常用的还有ElemenetType.TYPE,说明用在 类,接口(包括注解类型)或enum声明。Retention表示这种类型的注解会被保留到那个阶段,这里表示这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用。Documented 指明该注解包含在Javadoc中。Inherited则允许子类继承父类中的注解。

@Target(ElementType.METHOD) 
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface UseCase
{

    public int id() default -1;
//    public int value(); 

    public String description() default "no description";
}

使用注解

public class Handlee
{

    @UseCase(id = 1)
    public void showID(){

    }
    @UseCase(id = 2)
    public void getID(){

    }
}

注解处理器

通过java另一个强大的功能反射来获得一个类上标注的注解。这里trackUseCases()方法通过传入的类型参数来获得该类上的注解信息。

public class AnnotationProcessor
{
    public static void trackUseCases(Class<?> cls){       
        for (Method method : cls.getDeclaredMethods()){           
            UseCase useCase = method.getDeclaredAnnotation(UseCase.class);
            System.out.println(useCase.id()+": " + useCase.description());
        }
    }
}

客户端调用

public class Client
{
    public static void main(String[] args) {
        AnnotationProcessor.trackUseCases(Handlee.class);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值