注解

  注解是jdk1.5新增特性,可用来修饰类、方法、属性。注解处理器利用反射获取类、方法、属性头上的注解,并提取出其中的参数来做出相应的逻辑处理。注解处理器是用于分析注解的,针对每一个已经定义的注解都必须给出对应的注解处理器,否则注解不会起到任何作用。
  

// 元注解,jdk提供的四个用于修饰自定义注解的注解

// 设置自定义注解修饰的对象范围,从枚举ElementType中获取
// ElementType.TYPE:类、接口、注解、枚举
// ElementType.FIELD:成员变量
// ElementType.LOCAL_VARIABLE:局部变量
// ElementType.METHOD:方法
// ElementType.PARAMETER:参数
// ElementType.CONSTRUCTOR:构造器
// ElementType.PACKAGE:包
// 表示该注解可修饰类、接口、注解、枚举修,也可修饰方法
@Target({ElementType.TYPE, ElementType.METHOD})

// 设置自定义注解的生命周期周期,从枚举RetentionPolicy中获取
// RetentionPolicy.SOURCE:源文件中有效
// RetentionPolicy.CLASS:类文件中有效
// RetentionPolicy.RUNTIME:运行时有效
// 表示该注解在程序运行时其作用
@Retention(RetentionPolicy.RUNTIME)

// 标记注解,无参数,用于标记自定义注解,被标记的注解修饰的类可以被文档化
@Documented

// 标记注解,无参数,用于标记自定义注解,被标记的注解修饰的类的子类会继承该注解
@Inherited

// 自定义注解,在接口关键字interface前加@,可用元注解来修饰自定义注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation {
    // 方法声明就是注解参数声明,方法名字是注解参数名字,方法返回类型是注解参数类型
    // 参数类型只能是基本类型、Class、String、enum、注解类型,以上类型的数组
    // 访问修饰符只能为public或默认,若只有一个参数,建议参数名用value
    public String a();
    // default可指定参数的默认值
    public int b() default -1;
}

// 注解处理器需要由使用注解的用户自己调用,如以拦截器的形式处理注解,自定义类加载器的形式处理注解
public class MyAnnotationHandler {
    public static void handle(String className, String methodName) {
        Method m = Class.forName(className).getDeclaredMethod(methodName);
        // 以反射的形式获取类的注解对象,根据注解对象获取注解信息
        MyAnnotation my = m.getAnnotation(MyAnnotation.class);
        System.out.println(my.a());
        System.out.println(my.b());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值