阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第3节 注解_17_注解_解析注解


注解定义了这些属性和属性值。定义了这些值一定期望在程序运行过程中,可以把这些属性值拿出来用一用

注解代替配置文件

复制之前创建的ReflectTest这个类。




之前反射Test是读取配置文件拿到className和Method。现在以后了注解以后,我们可以把配置文件的工作交给注解来完成,来简化我们配置的操作。
在后期,注解大部分都是用来替换配置文件。

也就是说有了注解以后,下面选中的这块 红色框选的这块代码就可以不用写了。


把代码都删掉。

我们以前用配置文件定义的这两个属性

新建一个注解类

会自动生成@interface




并期望保留在runntime阶段。

新建一个Demo1的类,里面定义一个show方法

复制一个Demo1的类,叫做Demo2



报名和方法名通过注解的方式 配置上。期望告诉ReflectTest这个类 去执行配置的 包下的类的show方法

解析注解

根据注定的类型获取注解

获取该类上定义的所有注解。



注解里面本来定义的就是抽象方法。起名叫做属性。

对象拿到了方法可以试着去调用。
下面这样就拿到了className

为什么注解对象可以调用方法呢?
Pro本质上是一个接口。在内存中,搞了个子类的实现对象,实现了Pro这个接口。并且这个接口里面搞了一些方法


重写方法返回值是String类型的

那么这两个返回的值到底是谁呢?

就要看用这个注解的类 配置的是什么?就是返回值






an.className()相当于就是返回的cn.itcast.annotation.Demo1




运行程序


把阵列的注解删掉即可。这个类和我们当前运行的案例没有啥关系。


继续运行ReflectTest这个类



拿到两个属性值之后,剩下的代码我们直接复制过来就可以了。



show方法被正常的调用了。


如果注解定义在方法上了。method也有这两个方法

总结:




 

原文地址:https://www.cnblogs.com/wangjunwei/p/11290257.html