1.注解的概念
- 注解是一种元数据模式。即注解是属于java的一种数据类型,和类、接口、数组、枚举类似。
- 注解不会对所修饰的代码产生直接的影响
2.注解的使用范围
- 类、接口、枚举:@Controller 标记controller层、@Service 标记service层、@Mapper 标记DAO,自动映射
- 属性 @Autowired 自动装配
- 方法 @Override 表示重写
- 方法形式参数 @Param 设置传递参数的名称
- 构造方法
- 局部变量
- 注解类型 @Target 标记此注解类的使用范围
- 包
3.注解的基本语法
- 注解类型的声明:注解在Java中,与类、接口、枚举类似,因此声明语法基本一致,只是所使用的关键字有所不同,其使用@interface。在底层实现上,所有定义的注解都会自动继承java.lang.annotation.Annotation接口。
public @interface TestAnnotation{
}
- 注解类型的实现部分:其实现部分只能定义注解类型元素(annotation type element)。
//class的一维数组类型
Class<? extends Payload>[] payload() default { };
//基本数据类型
int ret() default 7;
//String类型
String message() default "message params error";
- 定义注解类型的特点:
1.访问修饰符必须为public,不写默认为public 。
2.该元素类型只能是基本数据类型,String、Class、枚举类型、注解类型(体现了注解的嵌套效果),以及上述类型的一维数组。
3.()不是定义方法参数的地方,也不能在括号中定义任何参数,仅仅只是一个特殊语法
4.default代表默认的值,值必须和第2点定义的类型一致
5.如果没有默认值,代表后续使用注解时必须给该类型元素赋值
4.自定义注解所使用到的元注解
- @Target注解,专门用来限定某个自定义注解能被应用到哪些Java元素上面
//只适用于属性
@Target(ElementType.FIELD)
//属性和方法都适用
@Target({ElementType.METHOD, ElementType.TYPE})
其中ElementType支持的类别为
public enum ElementType {
/** Class, interface (including annotation type), or enum declaration */
TYPE,
/** Field declaration (includes enum constants) */
FIELD,
/** Method declaration */
METHOD,
/** Formal parameter declaration */
PARAMETER,
/** Constructor declaration */
CONSTRUCTOR,
/** Local variable declaration */
LOCAL_VARIABLE,
/** Annotation type declaration */
ANNOTATION_TYPE,
/** Package declaration */
PACKAGE,
/**
* Type parameter declaration
*
* @since 1.8
*/
TYPE_PARAMETER,
/**
* Use of a type
*
* &#