java中的注解
2019-08-12 / JAVA / 1171 次围观 / 0 次吐槽 /简述:
Ø 注解它不是注释,注释是程序员写的,给程序员看的。
Ø 注解给程序看,用于描述程序如何运行及在什么阶段来运行。
Ø 注解在实际开发中,最大的功能是用于替换配置文件。
Ø 注解是jdk1.5的新特性
Ø 可以通过反射来让注解具有功能。
Ø 注解的格式: @xxxx
Ø 注解它的本质就是一个接口,这个接口需要继承 Annotation接口
三个基本的注解
@Override:检查子类确实是覆盖/重写了父类的方法。
@Deprecated:说明已经过时了。
@SuppressWarnings({ "unused", "deprecation" }):抑制程序中的警告。unused警告的类型。{}数组。all抑制所有警告
如何声明注解
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。
l @Retention:作用。改变自定义的注解的存活范围。
RetentionPolicy:
SOURCE
CLASS
RUNTIME
l @Target:作用,指定该注解能用在什么地方。
ElementType:
TYPE:
METHOD:
FIELD:
ANNOTATION_TYPE
@Documented:作用,使用了@MyTest的注解的类,如果@MyTest注解上面有@Documented注解,那么使用了@MyTest的注解的类的API文档中会出现@MyTest的身影。
@Inherited:作用,说明该注解可以被继承下去。
Servlet3.0中的2个常用注解
WebFilter
WebServlet
- 上一篇:文件上传和下载
- 下一篇:ubuntu_18.04_server安装与配置
Powered By Cheug's Blog
Copyright Cheug Rights Reserved.