java中的注解
2019-08-12 / JAVA / 1096 次围观 / 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.