一、注解概述

      1、学习注解能够读懂别人的代码,特别是框架相关的代码
      2、让自己的编程更加简洁,代码更加清晰
      3、让别人高看一眼,会使用自定义注解来解决问题
      4、概念:Java提供了一种原程序中的元素关联任何信息的任何元数据的途径和方法
 
二、Java中的常见注解   Annotation
      1、JDK自带注解
            @Override
            @Deprecated   表示方法已经过时了,在方法上加一个中划线,
            @Suppvisewarnings  表示忽略警告
      2、常见第三方注解
           Spring:@Autowired
                   @Service
                   @Repository
           Mysbatis: @InsertProvider
                     @updateProvider
                     @Options
 
三、注解分类
      1、按运行机制分:
            源码注解: 注解只在源码中存在,编译成.class文件就不存在了。
            编译时注解:注解在源码和.class文件中都存在
            运行时注解:在运行阶段还起作用,甚至会影响运行逻辑的注解
       2、按来源分:
             JDK的注解
             第三方的注解
             自定义的注解
       3、元注解:注解的注解
四、自定义注解
       1、自定义注解的语法要求
                        
          成员类型是受限的,包括原始数据类型,String,Class,Annotation,Enumeration
          如果注解只有一个成员,则成员名必须取名为value(),在使用时可以胡磊成员名和赋值   号(=)
          注解可以没有成员,没有程员的注解称为标识注解
       2、元注解
             @Target 注解的作用域:构造方法、域、局部变量生命、方法、包、参数、类、接口
             @Retention  注解的生命周期:SOURCE、CLASS、RUNTIME
             @Inherited  允许子注解继承它
             @Documented  生成JavaDoc时包含注解的信息
       3、使用自定义注解
             使用注解的语法:
             @<注解名>(<成员名1>=<成员值1>,<>=<>,……)      
       4、解析注解
            通过反射获取类、函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑      
  1. //1.使用类加载器加载类
  2. Class c =Class.forName("要解析的类的全名");
  3. //2.找到类上面的注解
  4. boolean isExist = c.isAnnotationPresent(xxx.class);//xxx表示你要解析的注解的类名
  5. if(isExist){
  6. //3.拿到注解实例
  7. xxx d =(xxx)c.getAnnotation(xxx.class);
  8. System.out.println(d.value());
  9. }
  10. //4.找到方法上的注解
  11. Method[] ms = c.getMethod();
  12. for(Method m:ms){
  13. boolean isMExist = m.isAnnotationPresent(xxx.class);
  14. if(isMExist){
  15. xxx d =(xxx)m.getAnnotation(xxx.class);
  16. System.out.println(d.value());
  17. }
  18. //另一种解析方法
  19. for(Method m:ms){
  20. Annotation[] as = m.getAnnotation();
  21. for(Annotation a: as){
  22. if(a instanceOf xxx);
  23. xxx d =(xxx)a;
  24. System.out.println(d.value());
  25. }
  26. }
  27. }
 
五、在实际项目中使用自定义注解来解决问题
 
      如自己开发一个Hibernate     
 

全面解析java注解的更多相关文章

  1. 框架基础——全面解析Java注解

    为什么学习注解? 学习注解有什么好处? 学完能做什么? 答:1. 能够读懂别人写的代码,特别是框架相关的代码: 2. 让编程更加简洁,代码更加清晰: 3. 让别人高看一眼. spring.mybati ...

  2. 【iMooc】全面解析java注解

    在慕课上学习了一个关于java注解的课程,下面是笔记以及一些源码. Annotation——注解 1.JDK中的注解 JDK中包括下面三种注解: @Override:标记注解(marker annot ...

  3. 基础篇:深入解析JAVA注解机制

    目录 java实现注解的底层原理和概念 五种元注解详解 使用动态代理机制处理注解 spring.AOP和注解机制 (题外)@FunctionalInterface原理介绍 欢迎指正文中错误 关注公众号 ...

  4. 分享知识-快乐自己:全面解析 java注解实战指南

    请你在看这篇文章时,不要感到枯燥,从头到尾一行行看,代码一行行读,你一定会有所收获的. 问: 为什么学习注解? 学习注解有什么好处? 学完能做什么? 答: 1):能够读懂别人的代码,特别是框架相关的代 ...

  5. Java注解入门

    注解的分类   按运行机制分:   源码注解:只在源码中存在,编译后不存在 编译时注解:源码和编译后的class文件都存在(如@Override,@Deprecated,@SuppressWarnin ...

  6. Java注解教程:自定义注解示例,利用反射进行解析

    Java注解能够提供代码的相关信息,同时对于所注解的代码结构又没有直接影响.在这篇教程中,我们将学习Java注解,如何编写自定义注解,注解的使用,以及如何使用反射解析注解. 注解是Java 1.5引入 ...

  7. Java注解全面解析(转)

    1.基本语法 注解定义看起来很像接口的定义.事实上,与其他任何接口一样,注解也将会编译成class文件. @Target(ElementType.Method) @Retention(Retentio ...

  8. Java注解解析-搭建自己的注解处理器(CLASS注解使用篇)

    该文章是继Java注解解析-基础+运行时注解(RUNTIME)之后,使用注解处理器处理CLASS注解的文章.通过完整的Demo例子介绍整个注解处理器的搭建流程以及注意事项,你将知道如何去搭建自己的注解 ...

  9. java注解(Annotation)解析

    注解(Annotation)在java中应用非常广泛.它既能帮助我们在编码中减少错误,(比如最常见的Override注解),还可以帮助我们减少各种xml文件的配置,比如定义AOP切面用@AspectJ ...

随机推荐

  1. Web打印控件smsx.cab使用说明

    在项目开发中,经常会用到页面打印的功能,在ASP.NET环境下推荐一款web打印控件smsx.cab.    使用方法:一般会先定义一个用于打印的母版页(Print.Master),在母版页上做好布局 ...

  2. 在SQL Server实现最短路径的搜索

    开始 这是去年的问题了,今天在整理邮件的时候才发现这个问题,感觉顶有意思的,特记录下来. 在表RelationGraph中,有三个字段(ID,Node,RelatedNode),其中Node和Rela ...

  3. Java [leetcode 33]Search in Rotated Sorted Array

    题目描述: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 ...

  4. IE下设置unselectable与onselectstart属性的bug,Firefox与Chrome下的解决方案

    在IE下给DIV设置unselectable与onselectstart属性,可以让div的内容不能选中,这个功能在很多情况下,非常有用,但是他的bug太明显, 直接使用一个DIV是可以的,比如: & ...

  5. dephi WaitForMultipleObjects 用法

    在Delphi中WaitForMultipleObjects的使用   procedure ThreadTest;stdcall; var Handles:TWOHandleArray; //Hand ...

  6. OpenGL和pcDuino搭建数字示波器

    看到大神们用Arduino.AVR做示波器,感觉很好玩,手头的pcDuino能不能做呢?一不做二不休,现在我们就自己用pcDuino做一个. 硬件清单: pcDuino一块 杜邦线若干 软件环境: 1 ...

  7. dateline 在数据库中就是 整型字段。date函数是可以转换成可读日期的。

    返回数据中的dateline全部用date()函数转换后再返回,是要嵌套循环还是遍历,代码怎么写? //查询我的活动 function user_activity_info_by_uid($uid){ ...

  8. SystemParametersInfo

    Python的模块pywin32中的win32gui.SystemParametersInfo()函数 在使用win32con.SPI_SETDESKWALLPAPER设置Wallpaper时,其第二 ...

  9. 【转载】解析提高PHP执行效率的50个技巧

    1.用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量, 单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的”函数”(译注:PHP手 ...

  10. pip 安装python环境及打包

    0.安装虚拟环境 pip install virtualenv   virtualenv env1   source env1/bin/activate   1. 将包依赖信息保存在requireme ...