注解_自定义注解_元注解-注解_解析注解
注解_自定义注解_元注解
用于描述注解的注解
@Target : 描述注解能够作用的位置
@Retention : 描述注解被保留的阶段
@Documented : 描述注解是否被抽取到api文档中
@Inherited : 描述注解是否被子类继承
package Z_01.annotation; import java.lang.annotation.*; /** * @Target : 描述注解能够作用的位置 * * @Retention : 描述注解被保留的阶段 * * @Documented : 描述注解是否被抽取到api文档中 * * @Inherited : 描述注解是否被子类继承 */ @Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})//表示该My Anno3注解只能作用于类上 @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface MyAnno3 { }
注解_解析注解
注解处理器
何为解析注解?即通过反射获取类、函数或成员上的 运行时注解信息,从而实现动态控制程序运行的逻辑。
解析注解主要用到两个类库:
1.1. java.lang.annotation.Annotation
Java使用Annotation接口来代表程序元素前面的注解,该接口是所有Annotation类型的父接口。
1.2. java.lang.reflect.AnnotatedElement
AnnotatedElement 接口代表程序中可以接受注解的程序元素,是所有程序元素(Class、Method 、Field、Package和Constructor)的父接口。获取该接口对象之后,即可以调用对象方法来访问Annotation信息,常用有如下几个:
1. getAnnotations():返回该程序元素上存在的所有注解。
2. isAnnotationPresent(annotation.class):判断该程序元素上是否包含指定类型的注解
3. getDeclaredAnnotations():返回直接存在于此元素上的所有注释。与此接口中的其他方法不同,该方法将忽略继承的注释。
package Z_01.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 描述需要执行的类名,和方法名 */ @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Pro { String className(); String methodName(); /* public class ProImpl implements Pro{ return Z_01.annotation.Demo1; } String methodName(){ return "show"; } */ }
******************************************
public enum Person {
P1,P2;
}
******************************************
public class Demo1 {
public void show(){
System.out.println("demo1...show...");
}
}
******************************************
package Z_01.annotation;
@Pro(className = "Z_01.annotation.Demo1",methodName = "show")
public class ReflectTest {
public static void main(String[] args) {
/*
前提:不能改变该类的任何代码.可以创建任意类的对象,可以执行任意方法
*/
//1.解析注解
//1.1获取该类的字节码文件对象
Class<ReflectTest> reflectTestClass = ReflectTest.class;
//获取上边的注解对象
Pro an = reflectTestClass.getAnnotation(Pro.class);//其实就是在内存中生成了一个该注解接口的子类实现对象
//3.调用注解对象中定义的抽象方法,获取返回值
String className = an.className();
String methodName = an.methodName();
System.out.println(className);
System.out.println(methodName);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix