没有合适的资源?快使用搜索试试~ 我知道了~
注解Annotation实现原理与自定义注解例子.pdf
需积分: 46 9 下载量 20 浏览量
2020-01-07
15:16:22
上传
评论
收藏 970KB PDF 举报
温馨提示
试读
12页
注解Annotation实现原理与自定义注解例子 每当你创建描述符性质的类或者接口时,一旦其中包含重复性的工 作,就可以考虑使用注解来简化与自动化该过程。 Java提供了四种元注解,专门负责新注解的创建工作
资源推荐
资源详情
资源评论
注解作用:每当你创建描述符性质的类或者接口时,一旦其中包含重复性的工
作,就可以考虑使用注解来简化与自动化该过程。
Java提供了四种元注解,专门负责新注解的创建工作。
元注解
元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta
annotation类型,它们被用来提供对其它annotation类型作说明。
Java5.0定义的元注解:
1.@Target,
2.@Retention,
3.@Documented,
4.@Inherited
这些类型和它们所支持的类在java.lang.annotation包中可以找到。下
面我们看一下每个元注解的作用和相应分参数的使用说明。
@Target
@Target说明了Annotation所修饰的对象范围:Annotation可被用
于packages、types(类、接口、枚举、Annotation类型)、类型成员
(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、
catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰
的目标。
作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
取值(ElementType)有:
1.CONSTRUCTOR:用于描述构造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部变量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型)或enum声明
使用示例:
/***
*
*实体注解接口
*/
@Target(value={ElementType.TYPE})
@Retention(value=RetentionPolicy.RUNTIME)
public@interfaceEntity{
/***
*实体默认firstLevelCache属性为false
*@returnboolean
*/
booleanfirstLevelCache()defaultfalse;
/***
*实体默认secondLevelCache属性为false
*@returnboolean
*/
booleansecondLevelCache()defaulttrue;
/***
*表名默认为空
*@returnString
*/
StringtableName()default"";
/***
*默认以""分割注解
*/
Stringsplit()default"";
}
@Retention
@Retention定义了该Annotation被保留的时间长短:某些Annotation
仅出现在源代码中,而被编译器丢弃;而另一些却被编译在class文件中;编译
在class文件中的Annotation可能会被虚拟机忽略,而另一些在class被装载
时将被读取(请注意并不影响class的执行,因为Annotation与class在使用
上是被分离的)。使用这个metaAnnotation可以对Annotation的“生命
周期”限制。
作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期
(即:被描述的注解在什么范围内有效)
取值(RetentionPoicy)有:
1.SOURCE:在源文件中有效(即源文件保留)
2.CLASS:在class文件中有效(即class保留)
3.RUNTIME:在运行时有效(即运行时保留)
使用示例:
/***
*字段注解接口
*/
@Target(value={ElementType.FIELD})//注解可以被添加在属性上
@Retention(value=RetentionPolicy.RUNTIME)//注解保存在JVM运行时
刻,能够在运行时刻通过反射API来获取到注解的信息
public@interfaceColumn{
Stringname();//注解的name属性
}
Column注解的的RetentionPolicy的属性值是RUTIME,这样注解处理器可以
通过反射,获取到该注解的属性值,从而去做一些运行时的逻辑处理
@Documented
@Documented用于描述其它类型的annotation应该被作为被标注的程序
成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是
一个标记注解,没有成员。
@Inherited
@Inherited元注解是一个标记注解,@Inherited阐述了某个被标注的
类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于
一个class,则这个annotation将被用于该class的子类。
剩余11页未读,继续阅读
资源评论
流星天道酬勤
- 粉丝: 90
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功