在SpringMVC中,我们的业务层需要加上@Controller注解和@Requestmapping注解,那么他是怎么知道我们这些类上是否含有这些注解的呢?
答案就是反射,所以可以说框架的核心就是反射
现在我们利用反射进行模拟判断是否含有注解
随便定义一个类:
@Reference
public class FanSheTest {
public String run(String food){
System.out.println("我正在跑:"+food);
return "执行了";
}
编写代码判断这个类是否含有该Reference注解
/**获取类上的所有注解*/
Annotation[] declaredAnnotations = clazz.getDeclaredAnnotations();
for (Annotation declaredAnnotation : declaredAnnotations) {
if(declaredAnnotation.toString().contains("Reference")){
System.out.println("这个类上面有Reference注解");
}
}
运行结果如下所示:
在示例代码中,我们对FanSheTest
类使用了@Reference
注解。为了判断该类是否包含该注解,我们需要使用反射API来获取该类的注解信息。
首先,我们可以使用clazz.getDeclaredAnnotations()
获取该类上的所有注解。该方法返回一个Annotation[]
数组,其中包含了该类上所有的直接声明注解。
然后,我们可以遍历这个数组,对每个注解进行判断。在示例代码中,使用declaredAnnotation.toString().contains("Reference")
来判断注解的字符串表示是否包含"Reference",从而确定是否存在@Reference
注解。
需要注意的是,这种方式只能获取直接声明在类上的注解,并不能获取继承自父类的注解。如果需要获取继承的注解,可以使用clazz.getAnnotations()
方法。