什么是java的annotation(注解) ?
注解的定义(annootation):
public @interface TestAnnotation {
}
上面的这种形式,便定义了注解是如何定义的,在接口interface前加上一个@符号,便定义了一个名为TsetAnnotation的注解。注解的应用便是直接通过@TestAnnotation 对相关的类或者对象或者另一个注解进行注解。
例如:
@TestAnnotation
public class Test {
}
上面便是对test类进行注解。
1. 元注解:
元注解是一种基本的注解,用于对注解的注解,主要有以下几种形式,@Retention、(存活期)@Documented、(文档注解)@Target、(具体注解对象)@Inherited、(注解继承)@Repeatable,(可重
复性)
@Retention: 说明了注解的存活时间,以及它的生命周期。
相关的参数取值:
RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中
RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。
@Documented :与java文档有关,说明了能够将注解的元素加入到javadoc当中去。
@Target : 注解运用的具体对象。(属性 ,方法或局部变量 ,包等)
@target 相关的具体变量的取值:
ElementType.ANNOTATION_TYPE 可以给一个注解进行注解
ElementType.CONSTRUCTOR 可以给构造方法进行注解
ElementType.FIELD 可以给属性进行注解
ElementType.LOCAL_VARIABLE 可以给局部变量进行注解
ElementType.METHOD 可以给方法进行注解
ElementType.PACKAGE 可以给一个包进行注解
ElementType.PARAMETER 可以给一个方法内的参数进行注解
ElementType.TYPE 可以给一个类型进行注解,比如类、接口、枚举
@inherited: 注解的继承,注解可以继承到类的子类当中去。、
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@interface Test {}
@Test
public class A {}
public class B extends A {}
即类B同时也继承了类A的注解。
@Repeatable : 可重复行,注解能够具有可重复性,注解内容的值具有多个。
2 注解属性:
注解的属性也叫做成员变量。注解中只有成员变量没有方法,注解中成员变量的声明采用无参的形式来声明。当需要进行赋值时采用value=" "的形式来进行赋值,多个属性之间采用“,”隔开。
注解中属性可以有默认值 默认值采用“default= " " “的方式指定。
例:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {
public int id() default -1;
public String msg() default "Hi";
}
@Named 注解: 使用named注解来实现类的get 和set 方法:例:
@Named @RequestScoped public class Hello { private String name; public Hello() { } public String getName() { return name; } public void setName(String user_name) { this.name = user_name; } }
@RequestScoped注解:对于上述的java bean 的注解 ,请求层,用于对单个HTTP范围请求的web应用
@model 注解:意图用于定义该模型层的模型 - 视图 - 控制器体系结构,用于整个java bean的注解的封装。 对于单个的web网页app较快速。