论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
注解是如何实现的?
注解是如何实现的?
饭宝
论坛元老
|
2024-8-27 19:31:22
|
来自手机
|
显示全部楼层
|
阅读模式
楼主
主题
1879
|
帖子
1879
|
积分
5637
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
注解是否支持继续
不支持继续
不能使用关键字extends来继续某个@interface,但注解在编译后,编译器会自动继续java.lang.annotation.Annotation接口.
虽然反编译后发现注解继续了Annotation接口,但即使Java的接口可以实现多继续,但定义注解时依然无法使用extends关键字继续@interface。
区别于注解的继续,被注解的子类继续父类注解可以用@Inherited: 如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解。
注解实现的原理
//元注解
public @interface 注解名称{
}
复制代码
自定义的注解反编译后的内容
public interface MyAnno extends java.lang.Innotation.Annotation {
}
复制代码
也就是说,注解的本质其实就是一个接口,并且继续了java.lang.annotation.Annotation接口.
因此,注解里的属性都是常量,方法都是抽象方法。但是自定义注解不能使用void返回范例。而注解里的方法一般都叫 “属性”,因为用法一般都是:方法 = xxx
返回值范例有下列取值:
基本数据范例
String
枚举
注解
以上范例的数组
运行时注解解析
定义了注解后,就可以在代码中使用了,但这还没完,还需要对注解进行解析和处理。在运行时需要用到反射来解析注解,反射API中有专门用于处理注解的API:
AnnotatedElement :这是反射接口处理注解的核心范例,它是反射范例Method,Field和Constructor的基类,通过它的方法来获取注解Annotation实例。
用Annotation来处理详细的注解
注意,注解的解析和处理用的是反射,以是注解定义时要用RententionPolicy.RUNTIME,否则用反射是拿不到注解信息的,因为反射是在运行时(Runtime)。
解析注解实例:
public class MethodInfoParsing {
public static void main(String[] args) {
try {
Method[] methods = MethodInfoParsing.class
.getClassLoader().loadClass("MethodInfoExample").getDeclaredMethods();
for (Method method : methods) {
if (!method.isAnnotationPresent(MethodInfo.class)) {
continue;
}
for (Annotation annotation : method.getDeclaredAnnotations()) {
System.out.println("Annotation " + annotation + " on method " + method.getName());
}
MethodInfo info = method.getAnnotation(MethodInfo.class);
if ("Paul".equals(info.author())) {
System.out.println("From Pauls: " + method.getName());
}
}
} catch (ClassNotFoundException e) {
}
}
}
复制代码
关于作者
来自一线程序员Seven的探索与实践,持续学习迭代中~
本文已收录于我的个人博客:
https://www.seven97.top
公众号:seven97,欢迎关注~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
饭宝
论坛元老
这个人很懒什么都没写!
楼主热帖
53基于java的资源博客论坛系统设计与实 ...
zotero+坚果云实现多pc端及iPad同步管 ...
Android——一个简单的记账本APP ...
天涯神贴合集500篇(2023最新) ...
需求:清空三个月前的操作日志,并生成 ...
面试官:@Configuration 和 @Component ...
Python潮流周刊#5:并发一百万个任务要 ...
nginx 常用指令配置总结
【分布式计算】学习笔记(期末复习) ...
企业级数据治理工作怎么开展?Datahub ...
标签云
渠道
国产数据库
集成商
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表