annotation 的方法
@annoataiond
java annoatin 的方法:
@interface用来声明Annotation,@Documented用来表示该Annotation是否会出现在javadoc中,
@Target用来指定Annotation的类型,@Retention用来指定Annotation的策略。
java 常用的Annotation:
@Deprecated -- @Deprecated 所标注内容,不再被建议使用。 @Override -- @Override 只能标注方法,表示该方法覆盖父类中的方法。 @Documented -- @Documented 所标注内容,可以出现在javadoc中。 @Inherited -- @Inherited只能被用来标注“Annotation类型”,它所标注的Annotation具有继承性。 @Retention -- @Retention只能被用来标注“Annotation类型”,而且它被用来指定Annotation的RetentionPolicy属性。 @Target -- @Target只能被用来标注“Annotation类型”,而且它被用来指定Annotation的ElementType属性。 @SuppressWarnings -- @SuppressWarnings 所标注内容产生的警告,编译器会对这些警告保持静默。
四、注解元素
标签@UseCase由UseCase.java定义,其中包含int元素id,以及一个String元素description。注解元素可用的类型如下所示:
- 所有基本类型(int,float,boolean等)
- String
- Class
- enum
- Annotation
- 以上类型的数组
如果使用其他类型,编译器会报错。
在我们的I啊哦记得玩annotaion住的多的基础之的之后,annotaiton
如何的在系统中的被处理的执行?
首先,我们来看一下,annotaion 的retenionPolicy 支持的三种不同的类型,
sourceCode
写在源码中,在编译的视乎的,就会被抛弃掉。
class
写在源代码中,在编译的过程中,被保留在的class中的,具体I按照什么的格式的被保存到class 文件的内部,这里就
没有深究了。
在代码运行过程中,VM的(java virtual machine)就不再的使用annotaion 信息,这里尽在编译阶段中使用。
runtime
信息被写入class文件中,在系统的运行过程中,被VM提取的通过relfect API来读取的信息。
基于的上面的三种的策略,就会有相应的三种对应的解析方法:
sourceCode
主要的解析: 代码编辑一起的,从代码的中生成文档,读取java 源文件,特点是
annotiton 信息在源代码中的存在。
class
基于java 代码的编译的之后的字节码信息,直接都去的class中的信息,常用的
asm,javasit,cglib等。
runtime 的方法:
基于 java 提供的反射接口的,读取的允许在runtime 读取class 文件的.
我们把研究的重点凡在如何上述的这词儿特曲完成相应的动作,简化的开发效率。
Runtime的处理主要依赖于反射的接口,在总结吗中年需找的接口中的和输入的方法参数的n根据
根据的内容和数值,基于地代理模式的,动态生成的相应的代理类实力,然后得通过代理类的
调用相应的Invacationhandler,在invokcation Haner
完成的anontion的所要执行的动作,然后继续调用原来的方法,继续执行。
这里的 AnnotationListenerFor这个Annotation的实现机理为例 讲解如何完成自定义的Annotation解析过程。
这里示例是基于@ActionListenerFor动态给标注的方法,注册到按钮的事件监听器中。
1.@Target(ElementType.method)
//标注的运行阶段的
@Retension(RentenPolicy.RUNTIME)
public @Interface ActionListener{
String source(); //变量
}
2.使用的annitaion的BUttonFrame
public class ButtonFrame extends JFrame {
public ButtonFrame() {
///.....省略代码
///调用Annotation处理类,
ActionListenerInstaller.processAnnotations(this);
}
@ActionListenerFor(source = "yellowButton")
public void yellowBackground() {
panel.setBackground(Color.YELLOW);
}
}
public static void processAnnotations(Object obj) {
Class<?> cl = obj.getClass();
for (Method m : cl.getDeclaredMethods()) //遍历方法
{
ActionListenerFor a = m.getAnnotation(ActionListenerFor.class);//获取Annotation
if (a != null) //判断是否存在
{
//例如,这里会是yellowButton
Field f = cl.getDeclaredField(a.source());
f.setAccessible(true); //如果是私有,可以将私有变量,设置为可以访问.
addListener(f.get(obj), obj, m);
}
}
}
7.3 基于的Procssor 对源码的中的annotaion 进行处理
在Java6 中,集成了AbstractProcess/Process的接口的来方面的是一个
使用,一边的对代码中的进行的处理。
7.4 基于动态字节码动态修改的class
可以借助第三放的泪哭额来进行动态修改,class 文件中的动作,
可用的第三方的类库:asm,cglib,javaassit.
7.5 总结:
虽然的java 语言的层面上,支持annotation ,但是用户的在定义的Annotation
并实现在相应的处理的handler还是需要一定工作量,总体而言,还不是的非常的简便。
这里将核心步骤的总结一下,主要针对的runtime之间的Annotion解析器。
1. 定义Annotation
2.定义annotation 的处理类
3.创建invavationHandle 予以处理具体的逻辑
4.基于的Proxy.newProxyInstance()创建代理,并将
代理的实力的绑定到的Invalaction的实际例子上,
5.选择合适的调用的Annotaion 的时机的切入点
说明:上述的代码实力的是参考的CoreJava Volume .
https://blog.csdn.net/blueheart20/article/details/18810693
参考资料:
https://www.cnblogs.com/skywang12345/p/3344137.html:
https://www.cnblogs.com/xiaomoxian/p/5199601.html
annotation 的方法相关推荐
- Java 注解(Annotation)使用方法归纳
Java注解Annotation使用方法归纳 简介 注解是从JDK5开始支持,是Java对元数据的一种特殊支持.与注释有一定区别,可以理解为代码上的特殊标记,通过这些标记我们可以在编译,类加载,运行等 ...
- 揭开Annotation的面纱
Annotation是Java5.6只后的新特征(中文称之为注解),并且越来越多的得到了应用,比如Spring.Hibernate3.Struts2.iBatis3.JPA.JUnit等等都得到了广泛 ...
- Java凝视Annotation
Java凝视Annotation 从JDK 5開始,Java添加了对元数据(MetaData)的支持,也就是Annotation(凝视).Annotation提供了一种为程序元素设置元数据的方法 ...
- 深入理解Java注解Annotation及自定义注解
要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解其他注解.Java5. ...
- Java中的Annotation(2)----Annotation工作原理
上一篇文章已经介绍了如何使用JDK的三个标准Annotation,本文将介绍Annotation的原理,以及如何自定义Annotation,并利用Annotation来完成一些实际的功能. 定义Ann ...
- Annotation之一:Java Annotation基本功能介绍
一.元数据的作用 如果要对于元数据的作用进行分类,目前还没有明确的定义,不过我们可以根据它所起的作用,大致可分为三类: 编写文档:通过代码里标识的元数据生成文档.这是最常见的,也是java 最早提供的 ...
- 实现基于注解(Annotation)的数据库框架(三)自定义注解(Annotation)
#前言# 之前已经简单介绍了系统的内置注解,我们已经对注解有了一个初步的印象,接下来就来看看如何自定义注解. 此文章仍然转载自上一篇的作者,因为他写的实在是太好了,非常适合刚接触注解的朋友去看,原文的 ...
- 深入理解Java:注解(Annotation)自定义注解入门
要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解其他注解.Java5. ...
- 一小时搞明白自定义注解(Annotation)
原文链接:http://blog.csdn.net/u013045971/article/details/53433874 什么是注解 Annotation(注解)就是Java提供了一种元程序中的元素 ...
最新文章
- java中unknown source_java中GUI编程中的unknown source问题
- 【Kali渗透全方位实战】利用Beef进行XSS会话劫持(XSS Stored)
- 缅甸、老挝出入证可在西双版纳办
- CTreeCtrl的用法
- 阿里云原生数据库:POLARDB
- CCNA-网络常用工具介绍篇
- spark应用程序的运行架构(简单到复杂)
- sql查询前50条_您必须知道的前50条SQL查询
- k-近邻算法进行回归拟合
- JavaScript:屏蔽浏览器右键点击事件
- Linux的百度云有限速吗,mac(linux)下配置aria2解决百度云限速问题
- python 移动文件 覆盖_python 剪切移动文件的实现代码
- Oracle项目管理系统之HSE
- 软件工程_三层架构介绍
- No code “EPSG:4326“ from authority “EPSG“
- 万字总结:金融市场基础知识
- 如何听懂画外音-《用事实说话》:听懂“暗语”,让沟通透明化
- 计算机科学美国研究生排名,最新出炉 2018年USNews美国大学研究生计算机科学专业排名榜单...
- 【操作系统-Windows】杀毒软件工作原理 及 现在主要杀毒技术
- v-model的radio checkbox以及键盘修饰符使用
热门文章
- StringBuffer字符串
- 【IoT】14.Identify Customer Need 拿捏住客户的想法
- WPF 布局 - Grid, StackPanel, DockPanel, WrapPanel
- C#线程实现暂停与继续
- linux 街机列表,linux下街机模拟器联机
- 搜索引擎蜘蛛 ajax,SEO中的搜索引擎蜘蛛技术探析
- 关于VMware虚拟机安装失败的解决办法,报错(29142)或者安装系统后无法启动
- C语言中的随机数 srand ( ) 和 rand ( )
- 《卓有成效的管理者》——学习心得(一)
- 实用有效!React项目中使用watermark.js添加水印效果