Annotation原理
2024-10-16 17:58:11
为什么使用注解:
1、通过注解,可保存源数据在Java源代码中;并且注解不同于注释,注解享有编译期的类型检查保护。
2、可在描述符性质的类或接口中抽取重复性的工作,通过注解来简化与自动化这些工作。
注解本身:
1、三个点:
1) 注解的@Target和@Retention
2) 注解的属性
3) 注解处理器
四个元注解:
@Target 表示注解可以用于什么地方。(ElementType.FIELD 字段,包括enum实例
/LOCAL_VARIABLE
/CONSTRUCTOR
/METHOD
/TYPE
/PACKAGE
/PARAMETER
)
@Retention 表示需要在什么级别保存该注解信息。(RetentionPolicy.RUNTIME VM在运行期也保留注解
/SOURCE 注解将被编译器丢弃
/CLASS 注解在class文件中可用,但会被VM丢弃
)
@Documented 将此注解包含在Javadoc中
@Inherited 允许子类继承父类上的注解
注解处理器:
如果没有用来读取注解的工具,那注解也不会比注释更有用。 ——《Thinking in java》
原理:
通过反射得到某一个类上的注解、或者是某一个方法、某一个字段上的注解,然后取到注解的属性值,去完成相应需要的业务工作。
自定义一个简单注解,通过反射来处理。
//定义一个注解 @Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Display { String value() default "no values"; }
public class Hello {
//将自定义注解贴在一个方法上
@Display("hello")
public void sayHello(){ }
}
// 注解处理器
public class DisplayTracker {
//通过反射得到该方法上的Display注解。
public static void trackDisplays(Class<?> cl){
for(Method m :cl.getDeclaredMethods()){
Display display = m.getAnnotation(Display.class);
if(display!=null){
System.out.println(display.value());
}
}
}
public static void main(String[] args) {
trackDisplays(Hello.class);
}
}
输出:
最新文章
- 阿里云ECS(Centos)开启X11的步骤
- Excel与Word套打功能使用技巧及EXCEL数据处理成绩
- FEC难:
- 个人博客作业_week2
- Windows XP与Windows 7系统常见漏洞
- Lucene使用IKAnalyzer分词实例 及 IKAnalyzer扩展词库
- IIS下图片防盗连设置详解
- 【Lucene4.8教程之三】搜索
- SharePoint 2013 讨论板列表";Connect to Outlook"; 不可用解决方案
- 织梦DEDE网站后台如何上传附件
- 【AHOI2005】病毒检测
- WEB框架-Django框架学习(二)- 模型层
- python vs C++ 类
- mysql ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constrain fails
- Linux下快速配置Java开发环境
- Python-正则复习-56
- 2955 ACM 杭电 抢银行 01背包 乘法
- linux进程状态D
- Linux升级内核教程(CentOS7)
- HDU3572构造图的模型