Java学习笔记之注解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lsf921016/article/details/68957281

1. 什么是注解?

  • 注解替代了xml等配置文件,用于定义某种映射关系。
  • 注解也是一个类,所有的注解都是Annotation的子类
  • tomcat通过反射来读取注解信息

2.注解的使用

  • 定义注解类:由框架完成
  • 使用注解类:开发人员完成
  • 读取注解:框架完成

3.注解的定义

@interface myAnnotation(){}

4. 使用注解

注解的作用目标:
- 类
- 方法
- 参数
- 局部变量
- 包

注解的属性:

  • 定义注解属性:
@interface MyAnnotation{
int number() default 100;//定义注解属性的默认值
int age();
String name();
  • 使用注解时需要给属性赋值:
@MyAnnotation(age=10,name="lin")//可以覆盖默认值
public class A{}
  • 一种特殊情况,即属性名value时,给他赋值时可以不写属性名,直接写要赋的值
@interface MyAnnotation{
int value();
}

@MyAnnotation(100)
public class B{}

5. 反射注解

  1. 要求:注解的保留策略必须是runtime
  2. 反射注解需要从作用目标上返回
    • 类上的注解需要用Class获取
    • 方法上的注解需要用Method获取
    • 构造器上的注解需要用Constructor获取
    • 成员上的注解需要用Field获取

其中Class为第一种,Method,Constructor,Field因为都继承了AccessableObject,并为第二类

public class Test {
    public static void main(String[] args) throws NoSuchMethodException {
        //得到作用目标,类
        Class clazz=A.class;

        //得到作用目标,方法
        Method method=clazz.getMethod("show");

        //获取指定类型的注解
        MyAnno myAnno1= (MyAnno) clazz.getAnnotation(MyAnno.class);
        System.out.println(myAnno1.name()+","+myAnno1.age());

        MyAnno myAnno2=method.getAnnotation(MyAnno.class);
        System.out.println(myAnno2.name()+","+myAnno2.age());
    }
}
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnno{
    int age();
    String name();
}

@MyAnno(age=1,name="lin")
class A{

    @MyAnno(age=2,name="li")
    public void show(){

    }
}

猜你喜欢

转载自blog.csdn.net/lsf921016/article/details/68957281