一、注解概述

      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. acdream 小晴天老师系列——竖式乘法(简单穷举)

    小晴天老师系列——竖式乘法 Time Limit: 4000/2000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others)   ...

  2. c语言编程风格

    关于c语言的编程风格,不同的书上有不同的推荐,不同的公司有不同的要求.这里,做了一下基本规范说明. 1.变量定义 在定义变量时,前缀使用变量的类型,之后使用表现变量用途的英文单词或单词缩写,且每个单词 ...

  3. 【转】 Android 开发 之 JNI入门 - NDK从入门到精通

    原文网址:http://blog.csdn.net/shulianghan/article/details/18964835 NDK项目源码地址 : -- 第一个JNI示例程序下载 : GitHub  ...

  4. 【转】Android之NDK开发

    原文网址:http://www.cnblogs.com/devinzhang/archive/2012/02/29/2373729.html 一.NDK产生的背景 Android平台从诞生起,就已经支 ...

  5. ArcGIS.Server.9.3和ArcGIS API for JavaScript地图实现Toorbar功能(四)

    转自:http://www.cnblogs.com/hll2008/archive/2008/11/22/1338630.html 目的:1.ArcGIS API for JavaScript实现To ...

  6. Live555研究之二Sleep实现

    Live555通过一个while循环来不断读取socket,判断是否有连接进来,但是Live555并没有使用Sleep函数来让线程休眠多少毫秒来降低CPU占用率.Live555是通过select函数来 ...

  7. LeetCode题解——Longest Palindromic Substring

    题目: 给定一个字符串S,返回S中最长的回文子串.S最长为1000,且最长回文子串是唯一. 解法: ①遍历,对于每个字符,计算以它为中心的回文子串长度(长度为奇数),同时计算以它和右边相邻字符为中心的 ...

  8. Linux Shell 数学运算

    Linux Shell 数学运算 在Linux中直接使用数学运算符进行数学运算往往得不到我们想要的计算结果.要在Shell中进行数学运算,我们需要借助点小手段.目前,Linux Shell中进行数学运 ...

  9. Codeforces Round #138 (Div. 2) ACBDE

    A.Parallelepiped 题意:给一个六面体三面的面积,求12条边的长度和. 题解:因为都是整数,设边长分别为a,b,c,面积为xyz,那么可设x=a*b,y=b*c,z=c*a,简单解方程就 ...

  10. 现代程序设计——homework-01

    1.我的GitHub用户 首先,接触到现代程序设计这门课之后我才正式开始使用GitHub和它的客户端,以前都是去网站看代码.扒样例.我注册的账户名为:hennande.目前该账户中有我的第一份关于ho ...