自定义注解
看了一些资料说 自定义注解一般都是配合Spring的AOP进行使用
然后自定义注解 有点像 抽象方法 里面不能有方法体(原本以为可以直接写个方法在里面,那就太好用了),返回类型必须是基础类型
一般都是长这样的
public @interface iAnnotation {
String name() default "";
...
}
下面说说我了解到的基础用法
步骤
1.创建注解
public @interface iAnnotation {}
2.在自己创建的注解上面 加上元注解
第一个常用的元注解@Target
@Target({ElementType.METHOD,ElementType.TYPE,ElementType.FIELD})
这里的 METHOD , TYPE , FIELD 都是枚举类(枚举类又要补课了),指的是注解只允许加在 METHOD方法,TYPE类,FIELD字段 上面
第二个常用的元注解@Retention
@Retention(RetentionPolicy.RUNTIME)
一般都是用这个,运行时别的代码可以使用这个注解
3.使用注解
在相对应的地方上使用注解
如果在类上使用了 注解
if(类名.getClass().isAnnotationPresent(iAnnotation.class)){}
判断 这个类上 有没有使用 自定义注解
if值为真,有使用自定义注解 可以进行相对应的操作
如果在方法上使用注解
for(Method method : 类名.getClass().getDeclaredMethods()){
if(methond.isAnnotationPresent(iAnnotation.class)){
method.invoke(类名)
}
}
这里用了反射获取该类的全方法名
但是拿到的是一个数组 所以要用for-each循环将每个 method取出来
然后注意判断 是否有使用自定义注解
有的话就 调用该方法(使用反射的方式)
如果在方法上使用注解并且有带参数,例如@iAnnotation(times = 3)
for(Method method : 类名.getClass().getDeclaredMethods()){//先拿到所有方法
if(methond.isAnnotationPresent(iAnnotation.class)){//判断有没有用
iAnnotation annotation =
methond.getAnnotation(iAnnotation.class)//获取注解
annotation.times() //这里就拿到了注解里面写的times=3
}
}
当然还可以getDeclaredFields()拿取字段名
原视频讲的很棒的 链接🔗
https://www.bilibili.com/video/BV1eo4y1p7uH/?spm_id_from=333.337.search-card.all.click&vd_source=5951f25d79b162d0d6918adcc1984db1