Cheug's Blog

当前位置:网站首页 / JAVA / 正文

java中的注解

2019-08-12 / JAVA / 1096 次围观 / 0 次吐槽 /

简述:

Ø 注解它不是注释,注释是程序员写的,给程序员看的。

Ø 注解给程序看,用于描述程序如何运行及在什么阶段来运行。

Ø 注解在实际开发中,最大的功能是用于替换配置文件

Ø 注解是jdk1.5的新特性

Ø 可以通过反射来让注解具有功能。

Ø 注解的格式: @xxxx

Ø 注解它的本质就是一个接口,这个接口需要继承 Annotation接口

三个基本的注解

@Override:检查子类确实是覆盖/重写了父类的方法。

@Deprecated:说明已经过时了。

@SuppressWarnings({ "unused", "deprecation" }):抑制程序中的警告。unused警告的类型。{}数组。all抑制所有警告

image.png

如何声明注解

Step1:声明一个注解   @interface  注解名{}

Step2:声明注解中的成员(注解的属性类型可以有哪些?)

1.基本类型

2.String

3.枚举类型

4.注解类型

5.Class类型

6.以上类型的一维数组类型

Step3:注解使用

//声明注解
public @interface MyAnnotation {
    int age() default 1;
    String name() default "cheug";
    String[] value() default "";
    Class cls() default Object.class;
}
//使用注解
public class Demo {
    @MyAnnotation(age=11,name="xxx",value={"xx1","xx2"},cls= Date.class)
    public void test(){ }
}

模拟Junit中的@Test

//MyTest注解

@Retention(RetentionPolicy.RUNTIME)//保留到运行时
public @interface MyTest {
    String name() default "cheug";
}
//TestRunner

public class TestRunner {
    public static void main(String[] args) throws Exception{
        //获取字节码
        Class cls = Demo.class;
        //获取方法
        Method[] methods = cls.getMethods();
        for (Method method : methods){
            //获取方法上的注解
            MyTest myTest = method.getAnnotation(MyTest.class);
            if (method.getName().startsWith("test") && myTest != null){
                //调用方法
                method.invoke(cls.newInstance());
            }
        }
    }
}
//测试类 Demo.java

public class Demo {
    @MyTest()
    public void test1(){
        System.out.println("test1方法");
    }
    @MyTest(name = "xxx")
    public void test2(){
        System.out.println("test2方法");
    }
}

元注解

什么是元注解:

只能用在注解上的注解叫做元注解。(即:用于修饰注解的注解)


a、自定义的注解的存活范围(生命周期):默认是CLASS

image.png

@Retention:作用。改变自定义的注解的存活范围。

RetentionPolicy:

SOURCE

CLASS

RUNTIME

@Target:作用,指定该注解能用在什么地方。

ElementType

TYPE

METHOD

FIELD

ANNOTATION_TYPE

@Documented:作用,使用了@MyTest的注解的类,如果@MyTest注解上面有@Documented注解,那么使用了@MyTest的注解的类的API文档中会出现@MyTest的身影。

@Inherited:作用,说明该注解可以被继承下去。

Servlet3.0中的2个常用注解

WebFilter

image.png

WebServlet

image.png


Powered By Cheug's Blog

Copyright Cheug Rights Reserved.