@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 的方法相关推荐

  1. Java 注解(Annotation)使用方法归纳

    Java注解Annotation使用方法归纳 简介 注解是从JDK5开始支持,是Java对元数据的一种特殊支持.与注释有一定区别,可以理解为代码上的特殊标记,通过这些标记我们可以在编译,类加载,运行等 ...

  2. 揭开Annotation的面纱

    Annotation是Java5.6只后的新特征(中文称之为注解),并且越来越多的得到了应用,比如Spring.Hibernate3.Struts2.iBatis3.JPA.JUnit等等都得到了广泛 ...

  3. Java凝视Annotation

     Java凝视Annotation 从JDK 5開始,Java添加了对元数据(MetaData)的支持,也就是Annotation(凝视).Annotation提供了一种为程序元素设置元数据的方法 ...

  4. 深入理解Java注解Annotation及自定义注解

    要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解其他注解.Java5. ...

  5. Java中的Annotation(2)----Annotation工作原理

    上一篇文章已经介绍了如何使用JDK的三个标准Annotation,本文将介绍Annotation的原理,以及如何自定义Annotation,并利用Annotation来完成一些实际的功能. 定义Ann ...

  6. Annotation之一:Java Annotation基本功能介绍

    一.元数据的作用 如果要对于元数据的作用进行分类,目前还没有明确的定义,不过我们可以根据它所起的作用,大致可分为三类: 编写文档:通过代码里标识的元数据生成文档.这是最常见的,也是java 最早提供的 ...

  7. 实现基于注解(Annotation)的数据库框架(三)自定义注解(Annotation)

    #前言# 之前已经简单介绍了系统的内置注解,我们已经对注解有了一个初步的印象,接下来就来看看如何自定义注解. 此文章仍然转载自上一篇的作者,因为他写的实在是太好了,非常适合刚接触注解的朋友去看,原文的 ...

  8. 深入理解Java:注解(Annotation)自定义注解入门

    要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解其他注解.Java5. ...

  9. 一小时搞明白自定义注解(Annotation)

    原文链接:http://blog.csdn.net/u013045971/article/details/53433874 什么是注解 Annotation(注解)就是Java提供了一种元程序中的元素 ...

最新文章

  1. java中unknown source_java中GUI编程中的unknown source问题
  2. 【Kali渗透全方位实战】利用Beef进行XSS会话劫持(XSS Stored)
  3. 缅甸、老挝出入证可在西双版纳办
  4. CTreeCtrl的用法
  5. 阿里云原生数据库:POLARDB
  6. CCNA-网络常用工具介绍篇
  7. spark应用程序的运行架构(简单到复杂)
  8. sql查询前50条_您必须知道的前50条SQL查询
  9. k-近邻算法进行回归拟合
  10. JavaScript:屏蔽浏览器右键点击事件
  11. Linux的百度云有限速吗,mac(linux)下配置aria2解决百度云限速问题
  12. python 移动文件 覆盖_python 剪切移动文件的实现代码
  13. Oracle项目管理系统之HSE
  14. 软件工程_三层架构介绍
  15. No code “EPSG:4326“ from authority “EPSG“
  16. 万字总结:金融市场基础知识
  17. 如何听懂画外音-《用事实说话》:听懂“暗语”,让沟通透明化
  18. 计算机科学美国研究生排名,最新出炉 2018年USNews美国大学研究生计算机科学专业排名榜单...
  19. 【操作系统-Windows】杀毒软件工作原理 及 现在主要杀毒技术
  20. v-model的radio checkbox以及键盘修饰符使用

热门文章

  1. StringBuffer字符串
  2. 【IoT】14.Identify Customer Need 拿捏住客户的想法
  3. WPF 布局 - Grid, StackPanel, DockPanel, WrapPanel
  4. C#线程实现暂停与继续
  5. linux 街机列表,linux下街机模拟器联机
  6. 搜索引擎蜘蛛 ajax,SEO中的搜索引擎蜘蛛技术探析
  7. 关于VMware虚拟机安装失败的解决办法,报错(29142)或者安装系统后无法启动
  8. C语言中的随机数 srand ( ) 和 rand ( )
  9. 《卓有成效的管理者》——学习心得(一)
  10. 实用有效!React项目中使用watermark.js添加水印效果