Java-注解

来源:互联网 发布:java教程博客 编辑:程序博客网 时间:2024/06/01 10:26
一、注解介绍
注释是给人看的;注解是给程序看的。
在Servlet3.0中有一个注解类为@WebServlet,然后我们就可以在Servlet中使用@WebServlet中使用这个注解了。这个注解就是用来替代<servlet></servlet>,然后Tomcat会通过反射来读取注解中的信息!
二、定义注解

2.1、语法

public @interface MyAnn {

String value();
int value1();
}

2.2、元注解(注解的注解)
2.2.1、@Target限制注解的作用目标,如:
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface MyAnn {
}
2.2.2、@Retention指定注解的保留策略
注解的保留策略是指,注解是只保留在源代码上,还是保留到class文件上,再或者是类在运行时,可以被类加载器加载到内存中。
如果希望注解被反射,那么注解就要保留到运行时,而不是源代码或类文件上。如:
@Retention(RetentionPolicy.RUNTIME) 
public @interface MyAnn {
String value() default "hello"; 
int value1() default 100; 
}
2.2.3、@Override:作用在方法上的注解。当方法不是重写父类的方法时会报错;
2.2.4、@Deprecated:作用在方法上。标记该方法为作废方法(已过时);
2.2.5、@SuppressWarnings:作用在方法上,压制警告。

三、使用注解
3.1、@MyAnn(value1=100,value="hello") 
public class MyClass {
}
3.2、通过反射读取注解
3.2.1、定义注解
package cn.yjx.java.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)@Target({ ElementType.TYPE, ElementType.METHOD })public @interface MyAnn {String value() default "hello";int value1() default 100;}
3.2.2、定义类
package cn.yjx.java.annotation.clazz;import cn.yjx.java.annotation.MyAnn;@MyAnn(value="hello world", value1=200)public class MyClass {private int a;@MyAnn("myMethod") public void fun() {}}

3.2.3、测试,通过反射读取注解

package cn.yjx.java.annotation;import java.lang.reflect.Method;import cn.yjx.java.annotation.clazz.MyClass;public class Test {public static void main(String[] args) throws NoSuchMethodException, SecurityException {Class clazz = MyClass.class;MyAnn myAnn = (MyAnn)clazz.getAnnotation(MyAnn.class);System.out.println(myAnn.value());System.out.println(myAnn.value1());  Method method = clazz.getMethod("fun");MyAnn myAnn2 =method.getAnnotation(MyAnn.class);          System.out.println(myAnn2.value());System.out.println(myAnn2.value1()); }}
3.2.4、运行结果

0 0
原创粉丝点击