Java注解的简单了解
部分信息来自《Thinking In Java》
注解也成为元数据。什么是元数据?就是“关于数据的数据”
注解为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便的使用这些数据。
它可以用来完整的描述程序所需的信息,能够让编译器来测试和验证格式,存储有关程序的额外信息。
定义一个注解:
注解的样子和接口很像
package me.benzeph.annotation; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation { }
定义注解时,需要一些元注解(关于注解的注解)例如:@Target和@Retention。
@Target用来定义你的注解应用于什么地方。例如:方法,域。
@Target(ElementType.METHOD)
@Target(ElementType.CONSTRUCTOR)
@Target(ElementType.PARAMETER)
...
@Retention用来定义你的注解在哪个级别可用。例如:源代码中,类文件中或者运行时。
@Retention(RetentionPolicy.RUNTIME)
@Retention(RetentionPolicy.CLASS)
@Retention(RetentionPolicy.SOURCE)
如果一个注解中没有一个元素。那么它就称为标记注解。例如@Test。
在注解中,一般都会包含一些元素以表示某些值。当分析处理注解时,程序或工具可以利用这些值。
package me.benzeph.annotation; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
public int value();
}
package me.benzeph.annotation;
public class UseAnnotation {
@MyAnnotation(value = 10)
public void useMyAnnotation() {
}
}
如果没有读取注解的工具,那么注解也不会比注释更有用。
利用两个反射方法去解析一个含有某个注解的方法。
package me.benzeph.annotation; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
int value();
}
package me.benzeph.annotation;
public class UseAnnotation {
@MyAnnotation(value = 10)
public void useMyAnnotation() {
}
}
package me.benzeph.annotation;
import java.lang.reflect.Method;
public class MyAnnotationParser {
public boolean findMethodByValue(int value) {
for (Method method : UseAnnotation.class.getDeclaredMethods()) {
MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class);
if ((myAnnotation != null) && (myAnnotation.value() == value)) {
return true;
}
}
return false;
}
}
package me.benzeph.annotation; import org.junit.Before;
import org.junit.Test; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue; public class MyAnnotationParserTest { private MyAnnotationParser parser; @Before
public void setUp() throws Exception {
parser = new MyAnnotationParser();
} @Test
public void shouldReturnTrue() {
assertTrue(parser.findMethodByValue(10));
} @Test
public void shouldReturnFalse() {
assertFalse(parser.findMethodByValue(5));
}
}
Java注解的简单了解的更多相关文章
- java基础强化——深入理解java注解(附简单ORM功能实现)
目录 1.什么是注解 2. 注解的结构以及如何在运行时读取注解 2.1 注解的组成 2.2 注解的类层级结构 2.3 如何在运行时获得注解信息 3.几种元注解介绍 3.1 @Retention 3.2 ...
- Java注解--实现简单读取excel
实现工具类 利用注解实现简单的excel数据读取,利用注解对类的属性和excel中的表头映射,使用Apache的poi就不用在业务代码中涉及row,rows这些属性了. 定义注解: @Retentio ...
- java注解的简单介绍
什么是注解 1.注解就是Annontation,Annontation是Java5开始引入的新特征,中文名称叫做注解,它提供了一种安全的类似注释的机制,可以起到减少配置的成果,给程序起到辅助性的作用 ...
- 使用Java注解实现简单的依赖注入
代码如下: /** * 注入的注解,为空,仅起标志作用 */ @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @int ...
- 关于Java注解(annotation)的简单理解
一.什么是注解? 从 JDK5 开始,Java增加对元数据的支持,也就是注解.简单理解就是代码里的特殊标志,这些标志可以在编译,类加载,运行时被读取,并执行相应的处理,以便于其他工具补充信息或者进行部 ...
- java注解简单使用
java注解可以比喻成标签,可以贴在任何地方,也可以限制只能贴在固定地方,比如类上方.方法上方.属性[字段]上方等,然后通过反射,判断是否存在这个注解. 注解形式 public @interface ...
- JAVA 注解的几大作用及使用方法详解
JAVA 注解的几大作用及使用方法详解 (2013-01-22 15:13:04) 转载▼ 标签: java 注解 杂谈 分类: Java java 注解,从名字上看是注释,解释.但功能却不仅仅是注释 ...
- JAVA 注解的几大作用及使用方法详解【转】
java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单.注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解 ...
- spring纯java注解式开发(一)
习惯了用XML文件来配置spring,现在开始尝试使用纯java代码来配置spring. 其实,spring的纯java配置,简单来说就是将bean标签的内容通过注解转换成bean对象的过程,没什么神 ...
随机推荐
- 16_用LVM扩展xfs文件系统(当分区空间不够时)
1. 查看当前卷组空间(volume group)使用情况 [root@localhost ~]# vgdisplay 从下面的代码中发现剩余空间为0 --- Volume group --- VG ...
- 响应式设计的5个CSS实用技巧
正如我在教程响应式Web设计三步走当中所讲的,响应式的Web设计其实并不难,但是要让元素在布局切换时能够平滑过渡就比较考验技巧了.现在我分享在编码时常用的五个CSS技巧并举例说明.这些技巧都是使用简单 ...
- jquery.lazyload.js图片延迟加载
转:http://www.jb51.net/article/50273.htm 这篇文章主要介绍了Jquery图片延迟加载插件jquery.lazyload.js的使用方法,需要的朋友可以参考下 ...
- [R] /usr/share/doc/apache2/README.Debian.gz
Contents======== Apache2 Configuration under Debian GNU/Linux Files and Directories in '/etc/apache2 ...
- iOS证书详解--再转
一.成员介绍1. Certification(证书)证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:1) Developer Certification(开发证书)安装在电脑上 ...
- 转:如何找出发生SEGV内存错误的程序
原文来自于:http://www.searchtb.com/2014/03/%E5%A6%82%E4%BD%95%E6%89%BE%E5%87%BA%E5%8F%91%E7%94%9Fsegv%E5% ...
- temp 临时文件
放假了,放假了:http://blog.csdn.net/skywalker_only/article/details/17076851 nucht2.2.1爆出如下异常: Exception in ...
- BZOJ 1011 遥远的行星
Description 直线上N颗行星,X=i处有行星i,行星J受到行星I的作用力,当且仅当i<=AJ.此时J受到作用力的大小为 Fi->j=Mi*Mj/(j-i) 其中A为很小的常量,故 ...
- [POJ 1742] Coins 【DP】
题目链接:POJ - 1742 题目大意 现有 n 种不同的硬币,每种的面值为 Vi ,数量为 Ni ,问使用这些硬币共能凑出 [1,m] 范围内的多少种面值. 题目分析 使用一种 O(nm) 的 D ...
- backbone初次使用及hello world
官网:http://backbonejs.org/ Backbone.js gives structure to web applications by providing models with k ...