注解是Java1.5,JDK5.0引用的技术,与类,接口,枚举处于同一层次 。它能够声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释 。java
在Java中,自带了三种注解,这三种注解存在于java.lang包中,首先咱们讲一讲这些注解spring
首先,自定义注解咱们必须了解四个元注解,什么是元注解?元注解指做用于注解之上的元数据或者元信息,简单通俗的讲,元注解就是注解的注解 .编程
Documented与Inherited是典型的标识性注解,也就是说在注解内部并无成员变量,没有成员变量的注解称为标识注解
Target主要的参数类型包括如下几种数组
Retention主要的参数类型包括如下几种ide
自定义注解工具
注解的定义spa
注解中能够定义的数据类型是受到限制的,除了基本类型以外,String,Enums,Annotation,Class以及这些类型的数组 code
package com.deng.spring; import org.springframework.context.annotation.Scope; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** 用于指定该注解的做用范围,能够指定一个或者多个 ElementType.TYPE 用于类,接口,枚举但不能是注解 ElementType.FIELD 做用于字段,包含枚举值 ElementType.METHOD 做用于方法,不包含构造方法 ElementType.PARAMETER 做用于方法的参数 ElementType.CONSTRUCTOR 做用于构造方法 ElementType.LOCAL_VERIABLE 做用于本地变量或者catch语句 ElementType.ANNOTATION_TYPE 做用于注解 ElementType.PACKAGE 做用于包 */ @Target({ElementType.TYPE,ElementType.METHOD}) /** * 定义该注解的做用域 * RetentionPolicy.SOURCE 注解存在于源代码中,编译时会被抛弃 RetentionPolicy.CLASS 注解会被编译到class文件中,可是JVM会忽略 RetentionPolicy.RUNTIME JVM会读取注解,同时会保存到class文件中 */ @Retention(RetentionPolicy.RUNTIME) //@interface定义注解的关键词 //注解的名称为Animal public @interface Animal { /** //定义成员变量 语法为 数据类型 成员变量名() default 默认值; //成员变量能够经过default指定默认值 //若是成员变量不指定默认值的状况下 //咱们在使用注解时则必须给没有默认值的成员变量赋值 PS: 成员变量名为value时,使用注解的时候能够不指定成员变量名,直接设置一个值 注解中成员变量能够定义的数据类型是受到限制的,除了基本类型以外,String, Enums,Annotation,Class以及这些类型的数组 */ String value() ; public String color() ; }
注解的使用blog
package com.deng.spring; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; @Animal(value = "dog",color = "red") public class Dog { private String name; }
注解的解析继承
Class c = Dog.class; Annotation[] as = c.getAnnotations(); for(Annotation a : as){ if(a instanceof Animal){ Animal am = (Animal)a; //获取成员变量的值 System.out.println("value = " + am.value()); System.out.println("color = " + am.color()); } }