1.注解的作用

简单来说就是可以被其它程序【编译器】读取

用来做标注用:可以在字段变量方法接口等位置进行一个特殊的标记,为后续做一些诸如:代码生成数据校验资源整合等工作做铺垫。

2.注解的格式

@注释名

@component(value="xxxxx")

3.在哪里使用

package,class ,method,field

4.内置注解

@override、 @Deprecated【代表过时了】、@SuppressWarnings()

5.元注解

@Target():用于描述注解的使用范围 【类、方法、构造器】

  • ElementType.FIELD:说明自定义的注解可以用于类的变量
  • ElementType.METHOD:说明自定义的注解可以用于类的方法
  • ElementType.TYPE:说明自定义的注解可以用于类本身、接口或 enum类型

@Documented:是否将注解生成在Javadoc中

@Inherited: 子类可以继承父类的注解

@Retention:用于描述注解的生命周期

  • @Retention(RetentionPolicy.RUNTIME):表示注解可以一直保留到运行时,因此可以通过反射获取注解信息
  • @Retention(RetentionPolicy.CLASS):表示注解被编译器编译进 class文件,但运行时会忽略
  • @Retention(RetentionPolicy.SOURCE):表示注解仅在源文件中有效,编译时就会被忽略

6.自定义一个注解@Lenght

**第一步:**首先定义注解:@Length

@Target({ElementType.FIELD})
@Rentention(RetentionPolicy.RUNTIME)
public @interface Length(){
    //注解的参数 :参数类型 + 参数名();
	 int min();			//允许字符串长度的最小值  
     int max();			//允许字符串长度的最大值
     String errorMsg();  //自定义的错误提示信息
}

1、注解的定义有点像定义接口 interface,但唯一不同的是前面需要加一个 @符号

2、注解的成员变量只能使用基本类型、 String或者 enum枚举,比如 int可以,但 Integer这种包装类型就不行,需注意

3、像上面 @Target、 @Retention这种加在注解定义上面的注解,我们称为 “元注解”,元注解就是专门用于给注解添加注解的注解,简单理解,元注解就是天生就有的注解,可直接用于注解的定义上

public static String validate(Object object) {
    Field[] fields = object.getClass().getDeclaredFields();

    for(Field field: fields){
        
        if(field.isAnnotationPressenr(Length.class)){
            Length length = field.getAnnotation(Length.class)
        	field.setAccessible(true);
            int value = ((String)field.get(object)).length();
        
            if(value < length.min() || value > length.max()){
                return length.errorMsg();
            }
        }
    }
    return null;
}

[暂时归纳到这,更详细的,菜鸟教程]