1、注解的作用
代替xml配置文件,servlet3.0中,就可以不再使用web.xml文件,而是所有配置文件都使用注解!注解是由框架读取的。
2、注解的使用
2.1、定义和使用注解类
/**
* 注解类
* @author John
*/
public @interface MyAnno {
}
//注解可以作用在:类(接口或者枚举)、属性、方法、构造器、包、参数、局部变量、全局变量。
@MyAnno//注解放在类上
class Demo{
@MyAnno//注解放在全局变量上
String str;
@MyAnno//注解放在构造器上
Demo(){
}
@MyAnno//注解放在方法上
void fun1(@MyAnno String s){//注解放在参数上
@MyAnno//注解放在局部参数上
String str1;
}
}
2.2、注解的属性
定义属性:类型 名称 ()
public @interface MyAnno {
int age();
String name();
}
使用时给其赋值
@MyAnno(age=100,name="john")//注解放在类上
设置默认值:
int age() default 100;
在有默认值的时候在使用的时候可以不进行赋值
在只给名为value赋值的时候可以只写值,不写名
注解的属性类型可以是8中基本属性类型,String,Enum,Class,注解类型,包装类型不能用
2.3、注解的作用域限定
@Target(ElementType.METHOD)
public static final ElementTypeTYPE 类、接口(包括注释类型)或枚举声明
public static final ElementTypeFIELD 字段声明(包括枚举常量)
public static final ElementTypeMETHOD 方法声明
public static final ElementTypePARAMETER 参数声明
public static final ElementTypeCONSTRUCTOR 构造方法声明
public static final ElementTypeLOCAL_VARIABLE 局部变量声明
public static final ElementTypeANNOTATION_TYPE 注释类型声明
public static final ElementTypePACKAGE 包声明
2.4、注解的保留策略
@Retention(RetentionPolicy.RUNTIME)
源代码文件:(SOURCE)注解只保留在源代码中,当编译时就被忽略
字节码文件:(CLASS)注解保留到class字节码文件中,类加载到JVM中会被忽略
JVM中:(RUNTIME)会把注解加载到JVM内存中
限定注解的保留策略
2.5、反射注解
类上的注解:
@Test
public void fun1() {
Class<Demo> c = Demo.class;
MyAnno myAnno = c.getAnnotation(MyAnno.class);
System.out.println(myAnno.name());
}
获取其他元素上的注解:
MyAnno myAnno = (class/method/constructor/field/accessibleObject).getAnnotation(MyAnno.class);
网友评论