湖南省建设厅建管处/北海seo快速排名
JavaEE-Java开发框架的基础-注解机制
文章目录
- JavaEE-Java开发框架的基础-注解机制
- 概述
- 常见标识性注解
- 自定义注解
- @Retention
- @Target
- AnnotatedElement接口
- 注解应用实例
概述
Annotation(注解)工作方式:
从java1.5以后,jdk提供了注解开发,开发者可以自定义注解。Annotation并不影响代码的语义,但是它的工作方式常被用来开发程序工具或者类库,它反过来对正在运行的程序语义有所影响
举例: @override
override属于标识性注解
常见标识性注解
@Deprecated:过期的方法,不建议使用的
@SuppressWarning:消除警告(开发工具标志了黄线则为警告)
自定义注解
public @interface MyAnn {//定义注解的属性,必须要加上()String value();
}
@MyAnn(value = "hello")
public class AnnTest {
@interface代表注解
注解中可以设置值,在程序运行时配合使用
所有带@的接口都继承自
@Retention
@Retention是作用在注解上的注解,指明被注解的注解有效期
有三个RetentionPolicy类型的值可以设置
ClASS:注解指定的值至保留在类文件
RUNTIME:有效期包含通过反射被调用时
SOURCE:只保留在源代码
如:
@Retention(RetentionPolicy.RUNTIME )
public @interface testAnno {}
@Target
主要标注在注解上,表示被标注的注解可以标注在哪些域上
@Retention(RetentionPolicy.RUNTIME)
@Target(value={ElementType.METHOD})
public @interface Anndemo {//定义注解属性String [] value();}
以上表示只标注在方法上
@Target支持添加的类型
注解的值类型(是个枚举类型)
枚举中有以下项
AnnotatedElement接口
所有的域(类,方法,属性,包等)都实现了这个接口
接口中定义了获得注解的方法
注解应用实例
自定义注解:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;@Retention(RetentionPolicy.RUNTIME )
public @interface testAnno {String value();
}
自定义注解所添加的方法:
public class Caculate {
@testAnno(value = "相加的结果为")
public int add(int a, int b ){return a+b ;
}
}
反射调用方法,获得注解值,进而影响程序:
import java.lang.reflect.Method;public class testReflect {public static void main(String[] args) throws Exception {//创建Caculate类对象Class<?> clazz = Caculate.class ;//通过类对象获得实例Object obj = clazz.newInstance();//获得方法Method method = clazz.getDeclaredMethod("add", int.class, int.class);//判断是否存在注解boolean isA = method.isAnnotationPresent(testAnno.class) ;if(isA){//获得注解testAnno an = method.getAnnotation(testAnno.class) ;//获得注解的值String val = an.value();//反射调用add方法Object result = method.invoke(obj,new Object[]{1,2}) ;//结合注解的值System.out.println(val+result);}}
}