Java 注解概论

Java 注解概论

注解可以简化主流程代码,具体分为以下3个方面:
1.生成文档,在注释中随处可见,例如 @param@return 等;
2.代替配置文件,Spring 框架经常使用注解来代替XML配置文件,精简代码结构;
3.编译时进行格式检查,例如 @Override

1. 定义注解

所有注解都继承了 Annotation 接口,但不是采用 implement 关键字实现,而是用 @interface 声明接口来实现继承的逻辑,表示这是一个注解。例如,常见的 @Override 注解。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}

2. Java8元注解

元注解表示加在注解上的注解。

2.1 @Target

@Target 表示注解的作用域,共有以下几种类型:

  • TYPE:表示注解可以加在类、接口、注解或枚举类上;
  • FIELD:表示注解可以加在类的变量上;
  • METHOD:表示注解可以加在方法上;
  • PARAMETER:表示注解可以加在方法的参数上;
  • CONSTRUCTOR:表示注解可以加在构造方法上;
  • LOCAL_VARIABLE:表示注解可以加在局部变量上;
  • ANNOTATION_TYPE:表示注解可以加在注解上(套娃);
  • PACKAGE:表示注解可以加在包上;
  • TYPE_PARAMETER:表示注解可以加在任何声明类型的地方;
  • TYPE_USE:表示注解可以加在任何使用类型的地方。

2.2 @Retention

@Retention 表示注解的生命周期,共有以下3种类型:

  • SOURCE:表示注解在编辑结束之后就被丢弃,主要用于编译时的格式检查使用,例如 @Override
  • CLASS:表示注解在类加载进虚拟机之后被丢弃,默认的类型;
  • RUNTIME:表示注解在程序运行时也会存在,即不会被丢弃,可以通过反射读取。

2.3 @Documented

@Documented表示是否将注解信息放入 javadoc 文档。

2.4 @Inherited

@Inherited 表示注解能够被继承。

2.5 @Repeatable

@Repeatable 表示注解能够重复添加。

3 注解实战

利用类的成员变量上的注解给变量赋值

3.1 自定义注解

@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {

    String value() default "";
}

3.2 类的定义

利用反射,调用类无参构造器时,会给类的成员变量赋注解指定的值。

@Data
public class Employee {

    @MyAnnotation("yasoo")
    private String name;

    @MyAnnotation("happy_wind_man")
    private String nickName;

    public Employee() {
        Class<Employee> clazz = Employee.class;
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            MyAnnotation myAnnotation = field.getAnnotation(MyAnnotation.class);
            field.setAccessible(true);
            try {
                field.set(Employee.this, myAnnotation.value());
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        Employee employee = new Employee();
        System.out.printf("The employee's name is %s, everybody call him %s.",
                employee.getName(), employee.getNickName());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值