一、注解概述

      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. 宏ut_2pow_remainder

    求余数 12%8=4 n%m也能计算出余数,但效率可能比位操作要低一些 /*************************************************************// ...

  2. bzoj2324后续思考

    昨天写bzoj2324的解题报告的时候突然隐隐约约发现了我程序的一点问题 睡了一觉之后找到了反例 如下: 4 4 2 0 1 2 1 2 1 2 3 2 2 4 2 对于这个测试数据,显然最短路径和为 ...

  3. jquery UI Draggable和Droppable 案例

    <html> <head><title>draggable</title> <script type="text/javascript& ...

  4. Spring编程风格

    给自己使用的无需定义接口:即一个模块内部的都是封装的,定义接口并不会得到很多好处,变过几次实现?? “优先面向接口编程,而非实现” 不是必须,是优先: 给朋友(第三方)使用的定义接口:即要公开的功能, ...

  5. Java [leetcode 12] Integer to Roman

    题目描述: Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range fr ...

  6. 【转】忙里偷闲写的小例子---读取android根目录下的文件或文件夹

    原文网址:http://www.cnblogs.com/wenjiang/p/3140055.html 最近几天真的是各种意义上的忙,忙着考试,还要忙着课程设计,手上又有外包的项目,另一边学校的项目还 ...

  7. (九)学习CSS之margin属性

    参考: 所有浏览器都支持 margin 属性. 注释:任何的版本的 Internet Explorer (包括 IE8)都不支持属性值 "inherit". 定义和用法 margi ...

  8. EF Code First 学习笔记:约定配置

    要更改EF中的默认配置有两个方法,一个是用Data Annotations(在命名空间System.ComponentModel.DataAnnotations;),直接作用于类的属性上面;还有一个就 ...

  9. HDU 5335 Walk Out

    题意:在一个只有0和1的矩阵里,从左上角走到右下角, 每次可以向四个方向走,每个路径都是一个二进制数,求所有路径中最小的二进制数. 解法:先bfs求从起点能走到离终点最近的0,那么从这个点起只向下或向 ...

  10. 通达信自动交易软件 z

    1.要善用spy++ 2.不同的控件主要靠GetDlgCtrlID去区分 3.要获得另一个进程的焦点窗口(GetFocus)需要调用AttachThreadInput 4.尽量少用keybd_even ...