JavaEE-Java开发框架的基础-注解机制

JavaEE-Java开发框架的基础-注解机制

概述

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);
        }
        
    }
}

发布了153 篇原创文章 · 获赞 93 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/JunSIrhl/article/details/104017247
今日推荐