Java注解

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 c = Demo.class;
    MyAnno myAnno = c.getAnnotation(MyAnno.class);
    System.out.println(myAnno.name());
}

获取其他元素上的注解:

  MyAnno myAnno = (class/method/constructor/field/accessibleObject).getAnnotation(MyAnno.class);

你可能感兴趣的:(Java注解)